summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Src/VertexLoader_Normal.cpp
diff options
context:
space:
mode:
authorhrydgard <hrydgard@gmail.com>2008-12-26 13:09:16 +0000
committerhrydgard <hrydgard@gmail.com>2008-12-26 13:09:16 +0000
commit95a341a4e95aceffd82c04ff114dd7a3e6feb6cd (patch)
treecf1deaf09e80f7914ea5803e4053aa127490e12d /Source/Core/VideoCommon/Src/VertexLoader_Normal.cpp
parentab01e9e8537c00b9783f79d3989c7ba35e18b5d8 (diff)
GL Vertex loader moved to VideoCommon.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1692 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/VideoCommon/Src/VertexLoader_Normal.cpp')
-rw-r--r--Source/Core/VideoCommon/Src/VertexLoader_Normal.cpp424
1 files changed, 424 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/Src/VertexLoader_Normal.cpp b/Source/Core/VideoCommon/Src/VertexLoader_Normal.cpp
new file mode 100644
index 0000000000..da2f990594
--- /dev/null
+++ b/Source/Core/VideoCommon/Src/VertexLoader_Normal.cpp
@@ -0,0 +1,424 @@
+// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+#include "Common.h"
+#include "VideoCommon.h"
+#include "VertexLoader.h"
+#include "VertexLoader_Normal.h"
+#include "NativeVertexWriter.h"
+
+#define LOG_NORM8() PRIM_LOG("norm: %f %f %f, ", ((s8*)VertexManager::s_pCurBufferPointer)[-3]/127.0f, ((s8*)VertexManager::s_pCurBufferPointer)[-2]/127.0f, ((s8*)VertexManager::s_pCurBufferPointer)[-1]/127.0f);
+#define LOG_NORM16() PRIM_LOG("norm: %f %f %f, ", ((s16*)VertexManager::s_pCurBufferPointer)[-3]/32767.0f, ((s16*)VertexManager::s_pCurBufferPointer)[-2]/32767.0f, ((s16*)VertexManager::s_pCurBufferPointer)[-1]/32767.0f);
+#define LOG_NORMF() PRIM_LOG("norm: %f %f %f, ", ((float*)VertexManager::s_pCurBufferPointer)[-3], ((float*)VertexManager::s_pCurBufferPointer)[-2], ((float*)VertexManager::s_pCurBufferPointer)[-1]);
+
+VertexLoader_Normal::Set VertexLoader_Normal::m_Table[NUM_NRM_TYPE][NUM_NRM_INDICES][NUM_NRM_ELEMENTS][NUM_NRM_FORMAT];
+
+void VertexLoader_Normal::Init(void)
+{
+ m_Table[NRM_DIRECT] [NRM_INDICES1][NRM_NBT] [FORMAT_UBYTE] = Set(3, Normal_DirectByte); //HACK
+ m_Table[NRM_DIRECT] [NRM_INDICES1][NRM_NBT] [FORMAT_BYTE] = Set(3, Normal_DirectByte);
+ m_Table[NRM_DIRECT] [NRM_INDICES1][NRM_NBT] [FORMAT_USHORT] = Set(6, Normal_DirectShort); //HACK
+ m_Table[NRM_DIRECT] [NRM_INDICES1][NRM_NBT] [FORMAT_SHORT] = Set(6, Normal_DirectShort);
+ m_Table[NRM_DIRECT] [NRM_INDICES1][NRM_NBT] [FORMAT_FLOAT] = Set(12, Normal_DirectFloat);
+ m_Table[NRM_DIRECT] [NRM_INDICES1][NRM_NBT3][FORMAT_UBYTE] = Set(9, Normal_DirectByte3); //HACK
+ m_Table[NRM_DIRECT] [NRM_INDICES1][NRM_NBT3][FORMAT_BYTE] = Set(9, Normal_DirectByte3);
+ m_Table[NRM_DIRECT] [NRM_INDICES1][NRM_NBT3][FORMAT_USHORT] = Set(18, Normal_DirectShort3); //HACK
+ m_Table[NRM_DIRECT] [NRM_INDICES1][NRM_NBT3][FORMAT_SHORT] = Set(18, Normal_DirectShort3);
+ m_Table[NRM_DIRECT] [NRM_INDICES1][NRM_NBT3][FORMAT_FLOAT] = Set(36, Normal_DirectFloat3);
+
+ m_Table[NRM_DIRECT] [NRM_INDICES3][NRM_NBT] [FORMAT_UBYTE] = Set(3, Normal_DirectByte); //HACK
+ m_Table[NRM_DIRECT] [NRM_INDICES3][NRM_NBT] [FORMAT_BYTE] = Set(3, Normal_DirectByte);
+ m_Table[NRM_DIRECT] [NRM_INDICES3][NRM_NBT] [FORMAT_USHORT] = Set(6, Normal_DirectShort); //HACK
+ m_Table[NRM_DIRECT] [NRM_INDICES3][NRM_NBT] [FORMAT_SHORT] = Set(6, Normal_DirectShort);
+ m_Table[NRM_DIRECT] [NRM_INDICES3][NRM_NBT] [FORMAT_FLOAT] = Set(12, Normal_DirectFloat);
+ m_Table[NRM_DIRECT] [NRM_INDICES3][NRM_NBT3][FORMAT_UBYTE] = Set(9, Normal_DirectByte3); //HACK
+ m_Table[NRM_DIRECT] [NRM_INDICES3][NRM_NBT3][FORMAT_BYTE] = Set(9, Normal_DirectByte3);
+ m_Table[NRM_DIRECT] [NRM_INDICES3][NRM_NBT3][FORMAT_USHORT] = Set(18, Normal_DirectShort3); //HACK
+ m_Table[NRM_DIRECT] [NRM_INDICES3][NRM_NBT3][FORMAT_SHORT] = Set(18, Normal_DirectShort3);
+ m_Table[NRM_DIRECT] [NRM_INDICES3][NRM_NBT3][FORMAT_FLOAT] = Set(36, Normal_DirectFloat3);
+
+ m_Table[NRM_INDEX8] [NRM_INDICES1][NRM_NBT] [FORMAT_UBYTE] = Set(1, Normal_Index8_Byte); //HACK
+ m_Table[NRM_INDEX8] [NRM_INDICES1][NRM_NBT] [FORMAT_BYTE] = Set(1, Normal_Index8_Byte);
+ m_Table[NRM_INDEX8] [NRM_INDICES1][NRM_NBT] [FORMAT_USHORT] = Set(1, Normal_Index8_Short); //HACK
+ m_Table[NRM_INDEX8] [NRM_INDICES1][NRM_NBT] [FORMAT_SHORT] = Set(1, Normal_Index8_Short);
+ m_Table[NRM_INDEX8] [NRM_INDICES1][NRM_NBT] [FORMAT_FLOAT] = Set(1, Normal_Index8_Float);
+ m_Table[NRM_INDEX8] [NRM_INDICES1][NRM_NBT3][FORMAT_UBYTE] = Set(1, Normal_Index8_Byte3_Indices1); //HACK
+ m_Table[NRM_INDEX8] [NRM_INDICES1][NRM_NBT3][FORMAT_BYTE] = Set(1, Normal_Index8_Byte3_Indices1);
+ m_Table[NRM_INDEX8] [NRM_INDICES1][NRM_NBT3][FORMAT_USHORT] = Set(1, Normal_Index8_Short3_Indices1); //HACK
+ m_Table[NRM_INDEX8] [NRM_INDICES1][NRM_NBT3][FORMAT_SHORT] = Set(1, Normal_Index8_Short3_Indices1);
+ m_Table[NRM_INDEX8] [NRM_INDICES1][NRM_NBT3][FORMAT_FLOAT] = Set(1, Normal_Index8_Float3_Indices1);
+
+ m_Table[NRM_INDEX8] [NRM_INDICES3][NRM_NBT] [FORMAT_UBYTE] = Set(1, Normal_Index8_Byte); //HACK
+ m_Table[NRM_INDEX8] [NRM_INDICES3][NRM_NBT] [FORMAT_BYTE] = Set(1, Normal_Index8_Byte);
+ m_Table[NRM_INDEX8] [NRM_INDICES3][NRM_NBT] [FORMAT_USHORT] = Set(1, Normal_Index8_Short); //HACK
+ m_Table[NRM_INDEX8] [NRM_INDICES3][NRM_NBT] [FORMAT_SHORT] = Set(1, Normal_Index8_Short);
+ m_Table[NRM_INDEX8] [NRM_INDICES3][NRM_NBT] [FORMAT_FLOAT] = Set(1, Normal_Index8_Float);
+ m_Table[NRM_INDEX8] [NRM_INDICES3][NRM_NBT3][FORMAT_UBYTE] = Set(3, Normal_Index8_Byte3_Indices3); //HACK
+ m_Table[NRM_INDEX8] [NRM_INDICES3][NRM_NBT3][FORMAT_BYTE] = Set(3, Normal_Index8_Byte3_Indices3);
+ m_Table[NRM_INDEX8] [NRM_INDICES3][NRM_NBT3][FORMAT_USHORT] = Set(3, Normal_Index8_Short3_Indices3); //HACK
+ m_Table[NRM_INDEX8] [NRM_INDICES3][NRM_NBT3][FORMAT_SHORT] = Set(3, Normal_Index8_Short3_Indices3);
+ m_Table[NRM_INDEX8] [NRM_INDICES3][NRM_NBT3][FORMAT_FLOAT] = Set(3, Normal_Index8_Float3_Indices3);
+
+ m_Table[NRM_INDEX16][NRM_INDICES1][NRM_NBT] [FORMAT_UBYTE] = Set(2, Normal_Index16_Byte); //HACK
+ m_Table[NRM_INDEX16][NRM_INDICES1][NRM_NBT] [FORMAT_BYTE] = Set(2, Normal_Index16_Byte);
+ m_Table[NRM_INDEX16][NRM_INDICES1][NRM_NBT] [FORMAT_USHORT] = Set(2, Normal_Index16_Short); //HACK
+ m_Table[NRM_INDEX16][NRM_INDICES1][NRM_NBT] [FORMAT_SHORT] = Set(2, Normal_Index16_Short);
+ m_Table[NRM_INDEX16][NRM_INDICES1][NRM_NBT] [FORMAT_FLOAT] = Set(2, Normal_Index16_Float);
+ m_Table[NRM_INDEX16][NRM_INDICES1][NRM_NBT3][FORMAT_UBYTE] = Set(2, Normal_Index16_Byte3_Indices1); //HACK
+ m_Table[NRM_INDEX16][NRM_INDICES1][NRM_NBT3][FORMAT_BYTE] = Set(2, Normal_Index16_Byte3_Indices1);
+ m_Table[NRM_INDEX16][NRM_INDICES1][NRM_NBT3][FORMAT_USHORT] = Set(2, Normal_Index16_Short3_Indices1); //HACK
+ m_Table[NRM_INDEX16][NRM_INDICES1][NRM_NBT3][FORMAT_SHORT] = Set(2, Normal_Index16_Short3_Indices1);
+ m_Table[NRM_INDEX16][NRM_INDICES1][NRM_NBT3][FORMAT_FLOAT] = Set(2, Normal_Index16_Float3_Indices1);
+
+ m_Table[NRM_INDEX16][NRM_INDICES3][NRM_NBT] [FORMAT_UBYTE] = Set(2, Normal_Index16_Byte); //HACK
+ m_Table[NRM_INDEX16][NRM_INDICES3][NRM_NBT] [FORMAT_BYTE] = Set(2, Normal_Index16_Byte);
+ m_Table[NRM_INDEX16][NRM_INDICES3][NRM_NBT] [FORMAT_USHORT] = Set(2, Normal_Index16_Short); //HACK
+ m_Table[NRM_INDEX16][NRM_INDICES3][NRM_NBT] [FORMAT_SHORT] = Set(2, Normal_Index16_Short);
+ m_Table[NRM_INDEX16][NRM_INDICES3][NRM_NBT] [FORMAT_FLOAT] = Set(2, Normal_Index16_Float);
+ m_Table[NRM_INDEX16][NRM_INDICES3][NRM_NBT3][FORMAT_UBYTE] = Set(6, Normal_Index16_Byte3_Indices3); //HACK
+ m_Table[NRM_INDEX16][NRM_INDICES3][NRM_NBT3][FORMAT_BYTE] = Set(6, Normal_Index16_Byte3_Indices3);
+ m_Table[NRM_INDEX16][NRM_INDICES3][NRM_NBT3][FORMAT_USHORT] = Set(6, Normal_Index16_Short3_Indices3); //HACK
+ m_Table[NRM_INDEX16][NRM_INDICES3][NRM_NBT3][FORMAT_SHORT] = Set(6, Normal_Index16_Short3_Indices3);
+ m_Table[NRM_INDEX16][NRM_INDICES3][NRM_NBT3][FORMAT_FLOAT] = Set(6, Normal_Index16_Float3_Indices3);
+}
+
+unsigned int VertexLoader_Normal::GetSize(unsigned int _type, unsigned int _format, unsigned int _elements, unsigned int _index3)
+{
+ return m_Table[_type][_index3][_elements][_format].gc_size;
+}
+
+TPipelineFunction VertexLoader_Normal::GetFunction(unsigned int _type, unsigned int _format, unsigned int _elements, unsigned int _index3)
+{
+ TPipelineFunction pFunc = m_Table[_type][_index3][_elements][_format].function;
+ return pFunc;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+// --- Direct ---
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+void LOADERDECL VertexLoader_Normal::Normal_DirectByte()
+{
+ *VertexManager::s_pCurBufferPointer++ = DataReadU8();
+ *VertexManager::s_pCurBufferPointer++ = DataReadU8();
+ *VertexManager::s_pCurBufferPointer++ = DataReadU8();
+ VertexManager::s_pCurBufferPointer++;
+ LOG_NORM8();
+// ((float*)VertexManager::s_pCurBufferPointer)[0] = ((float)(signed char)DataReadU8()+0.5f) / 127.5f;
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_DirectShort()
+{
+ ((u16*)VertexManager::s_pCurBufferPointer)[0] = DataReadU16();
+ ((u16*)VertexManager::s_pCurBufferPointer)[1] = DataReadU16();
+ ((u16*)VertexManager::s_pCurBufferPointer)[2] = DataReadU16();
+ VertexManager::s_pCurBufferPointer += 8;
+ LOG_NORM16()
+// ((float*)VertexManager::s_pCurBufferPointer)[0] = ((float)(signed short)DataReadU16()+0.5f) / 32767.5f;
+// ((float*)VertexManager::s_pCurBufferPointer)[1] = ((float)(signed short)DataReadU16()+0.5f) / 32767.5f;
+// ((float*)VertexManager::s_pCurBufferPointer)[2] = ((float)(signed short)DataReadU16()+0.5f) / 32767.5f;
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_DirectFloat()
+{
+ ((u32*)VertexManager::s_pCurBufferPointer)[0] = DataReadU32();
+ ((u32*)VertexManager::s_pCurBufferPointer)[1] = DataReadU32();
+ ((u32*)VertexManager::s_pCurBufferPointer)[2] = DataReadU32();
+ VertexManager::s_pCurBufferPointer += 12;
+ LOG_NORMF()
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_DirectByte3()
+{
+ for (int i = 0; i < 3; i++)
+ {
+ *VertexManager::s_pCurBufferPointer++ = DataReadU8();
+ *VertexManager::s_pCurBufferPointer++ = DataReadU8();
+ *VertexManager::s_pCurBufferPointer++ = DataReadU8();
+ VertexManager::s_pCurBufferPointer++;
+ LOG_NORM8();
+ }
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_DirectShort3()
+{
+ for (int i = 0; i < 3; i++)
+ {
+ ((u16*)VertexManager::s_pCurBufferPointer)[0] = DataReadU16();
+ ((u16*)VertexManager::s_pCurBufferPointer)[1] = DataReadU16();
+ ((u16*)VertexManager::s_pCurBufferPointer)[2] = DataReadU16();
+ VertexManager::s_pCurBufferPointer += 8;
+ LOG_NORM16();
+ }
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_DirectFloat3()
+{
+ for (int i = 0; i < 3; i++)
+ {
+ ((u32*)VertexManager::s_pCurBufferPointer)[0] = DataReadU32();
+ ((u32*)VertexManager::s_pCurBufferPointer)[1] = DataReadU32();
+ ((u32*)VertexManager::s_pCurBufferPointer)[2] = DataReadU32();
+ VertexManager::s_pCurBufferPointer += 12;
+ LOG_NORMF();
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+// --- Index8 ---
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+void LOADERDECL VertexLoader_Normal::Normal_Index8_Byte()
+{
+ u8 Index = DataReadU8();
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress+1);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress+2);
+ VertexManager::s_pCurBufferPointer++;
+// ((float*)VertexManager::s_pCurBufferPointer)[0] = ((float)(signed char)Memory_Read_U8(iAddress)+0.5f) / 127.5f;
+// ((float*)VertexManager::s_pCurBufferPointer)[1] = ((float)(signed char)Memory_Read_U8(iAddress+1)+0.5f) / 127.5f;
+// ((float*)VertexManager::s_pCurBufferPointer)[2] = ((float)(signed char)Memory_Read_U8(iAddress+2)+0.5f) / 127.5f;
+// VertexManager::s_pCurBufferPointer += 12;
+ LOG_NORM8();
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index8_Short()
+{
+ u8 Index = DataReadU8();
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]);
+ ((u16*)VertexManager::s_pCurBufferPointer)[0] = Memory_Read_U16(iAddress);
+ ((u16*)VertexManager::s_pCurBufferPointer)[1] = Memory_Read_U16(iAddress+2);
+ ((u16*)VertexManager::s_pCurBufferPointer)[2] = Memory_Read_U16(iAddress+4);
+ VertexManager::s_pCurBufferPointer += 8;
+ LOG_NORM16();
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index8_Float()
+{
+ u8 Index = DataReadU8();
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]);
+ ((u32*)VertexManager::s_pCurBufferPointer)[0] = Memory_Read_U32(iAddress);
+ ((u32*)VertexManager::s_pCurBufferPointer)[1] = Memory_Read_U32(iAddress+4);
+ ((u32*)VertexManager::s_pCurBufferPointer)[2] = Memory_Read_U32(iAddress+8);
+ VertexManager::s_pCurBufferPointer += 12;
+ LOG_NORMF();
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index8_Byte3_Indices1()
+{
+ u8 Index = DataReadU8();
+ for (int i = 0; i < 3; i++)
+ {
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 1*3*i;
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress+1);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress+2);
+ VertexManager::s_pCurBufferPointer++;
+ LOG_NORM8();
+ }
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index8_Short3_Indices1()
+{
+ u8 Index = DataReadU8();
+ for (int i = 0; i < 3; i++)
+ {
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 2*3*i;
+ ((u16*)VertexManager::s_pCurBufferPointer)[0] = Memory_Read_U16(iAddress);
+ ((u16*)VertexManager::s_pCurBufferPointer)[1] = Memory_Read_U16(iAddress+2);
+ ((u16*)VertexManager::s_pCurBufferPointer)[2] = Memory_Read_U16(iAddress+4);
+ VertexManager::s_pCurBufferPointer += 8;
+ LOG_NORM16();
+ }
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index8_Float3_Indices1()
+{
+ u8 Index = DataReadU8();
+ for (int i = 0; i < 3; i++)
+ {
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 4*3*i;
+ ((u32*)VertexManager::s_pCurBufferPointer)[0] = Memory_Read_U32(iAddress);
+ ((u32*)VertexManager::s_pCurBufferPointer)[1] = Memory_Read_U32(iAddress+4);
+ ((u32*)VertexManager::s_pCurBufferPointer)[2] = Memory_Read_U32(iAddress+8);
+ VertexManager::s_pCurBufferPointer += 12;
+ LOG_NORMF();
+ }
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index8_Byte3_Indices3()
+{
+ for (int i = 0; i < 3; i++)
+ {
+ u8 Index = DataReadU8();
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 1*3*i;
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress+1);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress+2);
+ *VertexManager::s_pCurBufferPointer++;
+ LOG_NORM8();
+ }
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index8_Short3_Indices3()
+{
+ for (int i = 0; i < 3; i++)
+ {
+ u8 Index = DataReadU8();
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 2*3*i;
+ ((u16*)VertexManager::s_pCurBufferPointer)[0] = Memory_Read_U16(iAddress);
+ ((u16*)VertexManager::s_pCurBufferPointer)[1] = Memory_Read_U16(iAddress+2);
+ ((u16*)VertexManager::s_pCurBufferPointer)[2] = Memory_Read_U16(iAddress+4);
+ VertexManager::s_pCurBufferPointer += 8;
+ LOG_NORM16();
+ }
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index8_Float3_Indices3()
+{
+ for (int i = 0; i < 3; i++)
+ {
+ u8 Index = DataReadU8();
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 4*3*i;
+ ((u32*)VertexManager::s_pCurBufferPointer)[0] = Memory_Read_U32(iAddress);
+ ((u32*)VertexManager::s_pCurBufferPointer)[1] = Memory_Read_U32(iAddress+4);
+ ((u32*)VertexManager::s_pCurBufferPointer)[2] = Memory_Read_U32(iAddress+8);
+ VertexManager::s_pCurBufferPointer += 12;
+ LOG_NORMF();
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+// --- Index16 ---
+/////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void LOADERDECL VertexLoader_Normal::Normal_Index16_Byte()
+{
+ u16 Index = DataReadU16();
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress+1);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress+2);
+ VertexManager::s_pCurBufferPointer++;
+ LOG_NORM8();
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index16_Short()
+{
+ u16 Index = DataReadU16();
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]);
+ ((u16*)VertexManager::s_pCurBufferPointer)[0] = Memory_Read_U16(iAddress);
+ ((u16*)VertexManager::s_pCurBufferPointer)[1] = Memory_Read_U16(iAddress+2);
+ ((u16*)VertexManager::s_pCurBufferPointer)[2] = Memory_Read_U16(iAddress+4);
+ VertexManager::s_pCurBufferPointer += 8;
+ LOG_NORM16();
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index16_Float()
+{
+ u16 Index = DataReadU16();
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]);
+ ((u32*)VertexManager::s_pCurBufferPointer)[0] = Memory_Read_U32(iAddress);
+ ((u32*)VertexManager::s_pCurBufferPointer)[1] = Memory_Read_U32(iAddress+4);
+ ((u32*)VertexManager::s_pCurBufferPointer)[2] = Memory_Read_U32(iAddress+8);
+ VertexManager::s_pCurBufferPointer += 12;
+ LOG_NORMF();
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index16_Byte3_Indices1()
+{
+ u16 Index = DataReadU16();
+ for (int i = 0; i < 3; i++)
+ {
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 1*3*i;
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress+1);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress+2);
+ VertexManager::s_pCurBufferPointer++;
+ LOG_NORM8();
+ }
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index16_Short3_Indices1()
+{
+ u16 Index = DataReadU16();
+ for (int i = 0; i < 3; i++)
+ {
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 2*3*i;
+ ((u16*)VertexManager::s_pCurBufferPointer)[0] = Memory_Read_U16(iAddress);
+ ((u16*)VertexManager::s_pCurBufferPointer)[1] = Memory_Read_U16(iAddress+2);
+ ((u16*)VertexManager::s_pCurBufferPointer)[2] = Memory_Read_U16(iAddress+4);
+ VertexManager::s_pCurBufferPointer += 8;
+ LOG_NORM16();
+ }
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index16_Float3_Indices1()
+{
+ u16 Index = DataReadU16();
+ for (int i = 0; i < 3; i++)
+ {
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 4*3*i;
+ ((u32*)VertexManager::s_pCurBufferPointer)[0] = Memory_Read_U32(iAddress);
+ ((u32*)VertexManager::s_pCurBufferPointer)[1] = Memory_Read_U32(iAddress+4);
+ ((u32*)VertexManager::s_pCurBufferPointer)[2] = Memory_Read_U32(iAddress+8);
+ VertexManager::s_pCurBufferPointer += 12;
+ LOG_NORMF();
+ }
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index16_Byte3_Indices3()
+{
+ for (int i = 0; i < 3; i++)
+ {
+ u16 Index = DataReadU16();
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 1*3*i;
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress+1);
+ *VertexManager::s_pCurBufferPointer++ = Memory_Read_U8(iAddress+2);
+ VertexManager::s_pCurBufferPointer++;
+ LOG_NORM8();
+ }
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index16_Short3_Indices3()
+{
+ for (int i = 0; i < 3; i++)
+ {
+ u16 Index = DataReadU16();
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 2*3*i;
+ ((u16*)VertexManager::s_pCurBufferPointer)[0] = Memory_Read_U16(iAddress);
+ ((u16*)VertexManager::s_pCurBufferPointer)[1] = Memory_Read_U16(iAddress+2);
+ ((u16*)VertexManager::s_pCurBufferPointer)[2] = Memory_Read_U16(iAddress+4);
+ VertexManager::s_pCurBufferPointer += 8;
+ LOG_NORM16();
+ }
+
+}
+
+void LOADERDECL VertexLoader_Normal::Normal_Index16_Float3_Indices3()
+{
+ for (int i = 0; i < 3; i++)
+ {
+ u16 Index = DataReadU16();
+ u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 4*3*i;
+ ((u32*)VertexManager::s_pCurBufferPointer)[0] = Memory_Read_U32(iAddress);
+ ((u32*)VertexManager::s_pCurBufferPointer)[1] = Memory_Read_U32(iAddress+4);
+ ((u32*)VertexManager::s_pCurBufferPointer)[2] = Memory_Read_U32(iAddress+8);
+ VertexManager::s_pCurBufferPointer += 12;
+ LOG_NORMF();
+ }
+}