forked from dolphin-emu/dolphin
		
	
		
			
	
	
		
			475 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			475 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								//__________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// F|RES 2003-2005
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "main.h"
							 | 
						||
| 
								 | 
							
								#include "Utils.h"
							 | 
						||
| 
								 | 
							
								#include "DecodedVArray.h"
							 | 
						||
| 
								 | 
							
								#include "VertexLoader.h"
							 | 
						||
| 
								 | 
							
								#include "VertexLoader_Normal.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								BYTE				VertexLoader_Normal::m_sizeTable[NUM_NRM_TYPE][NUM_NRM_FORMAT][NUM_NRM_ELEMENTS];
							 | 
						||
| 
								 | 
							
								TPipelineFunction	VertexLoader_Normal::m_funcTable[NUM_NRM_TYPE][NUM_NRM_FORMAT][NUM_NRM_ELEMENTS];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool VertexLoader_Normal::index3;
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Init
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void VertexLoader_Normal::Init(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									// size table
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_DIRECT][FORMAT_UBYTE] [NRM_NBT]		= 3;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_DIRECT][FORMAT_BYTE]  [NRM_NBT]		= 3;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_DIRECT][FORMAT_USHORT][NRM_NBT]		= 6;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_DIRECT][FORMAT_SHORT] [NRM_NBT]		= 6;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_DIRECT][FORMAT_FLOAT] [NRM_NBT]		= 12;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_DIRECT][FORMAT_UBYTE] [NRM_NBT3]	= 9;	
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_DIRECT][FORMAT_BYTE]  [NRM_NBT3]	= 9;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_DIRECT][FORMAT_USHORT][NRM_NBT3]	= 18;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_DIRECT][FORMAT_SHORT] [NRM_NBT3]	= 18;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_DIRECT][FORMAT_FLOAT] [NRM_NBT3]	= 36;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX8][FORMAT_UBYTE] [NRM_NBT]		= 1;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX8][FORMAT_BYTE]  [NRM_NBT]		= 1;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX8][FORMAT_USHORT][NRM_NBT]		= 1;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX8][FORMAT_SHORT] [NRM_NBT]		= 1;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX8][FORMAT_FLOAT] [NRM_NBT]		= 1;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX8][FORMAT_UBYTE] [NRM_NBT3]	= 3;	
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX8][FORMAT_BYTE]  [NRM_NBT3]	= 3;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX8][FORMAT_USHORT][NRM_NBT3]	= 3;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX8][FORMAT_SHORT] [NRM_NBT3]	= 3;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX8][FORMAT_FLOAT] [NRM_NBT3]	= 3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX16][FORMAT_UBYTE] [NRM_NBT]	= 2;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX16][FORMAT_BYTE]  [NRM_NBT]	= 2;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX16][FORMAT_USHORT][NRM_NBT]	= 2;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX16][FORMAT_SHORT] [NRM_NBT]	= 2;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX16][FORMAT_FLOAT] [NRM_NBT]	= 2;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX16][FORMAT_UBYTE] [NRM_NBT3]	= 6;	
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX16][FORMAT_BYTE]  [NRM_NBT3]	= 6;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX16][FORMAT_USHORT][NRM_NBT3]	= 6;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX16][FORMAT_SHORT] [NRM_NBT3]	= 6;
							 | 
						||
| 
								 | 
							
									m_sizeTable[NRM_INDEX16][FORMAT_FLOAT] [NRM_NBT3]	= 6;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// function table
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_DIRECT][FORMAT_UBYTE] [NRM_NBT]		= Normal_DirectByte; //HACK
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_DIRECT][FORMAT_BYTE]  [NRM_NBT]		= Normal_DirectByte;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_DIRECT][FORMAT_USHORT][NRM_NBT]		= Normal_DirectShort; //HACK
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_DIRECT][FORMAT_SHORT] [NRM_NBT]		= Normal_DirectShort;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_DIRECT][FORMAT_FLOAT] [NRM_NBT]		= Normal_DirectFloat;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_DIRECT][FORMAT_UBYTE] [NRM_NBT3]	= Normal_DirectByte3;	 //HACK
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_DIRECT][FORMAT_BYTE]  [NRM_NBT3]	= Normal_DirectByte3;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_DIRECT][FORMAT_USHORT][NRM_NBT3]	= Normal_DirectShort3; //HACK
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_DIRECT][FORMAT_SHORT] [NRM_NBT3]	= Normal_DirectShort3;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_DIRECT][FORMAT_FLOAT] [NRM_NBT3]	= Normal_DirectFloat3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX8][FORMAT_UBYTE] [NRM_NBT]		= Normal_Index8_Byte; //HACK
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX8][FORMAT_BYTE]  [NRM_NBT]		= Normal_Index8_Byte;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX8][FORMAT_USHORT][NRM_NBT]		= Normal_Index8_Short; //HACK
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX8][FORMAT_SHORT] [NRM_NBT]		= Normal_Index8_Short;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX8][FORMAT_FLOAT] [NRM_NBT]		= Normal_Index8_Float;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX8][FORMAT_UBYTE] [NRM_NBT3]	= Normal_Index8_Byte3;	 //HACK
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX8][FORMAT_BYTE]  [NRM_NBT3]	= Normal_Index8_Byte3;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX8][FORMAT_USHORT][NRM_NBT3]	= Normal_Index8_Short3; //HACK
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX8][FORMAT_SHORT] [NRM_NBT3]	= Normal_Index8_Short3;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX8][FORMAT_FLOAT] [NRM_NBT3]	= Normal_Index8_Float3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX16][FORMAT_UBYTE] [NRM_NBT]	= Normal_Index16_Byte; //HACK
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX16][FORMAT_BYTE]  [NRM_NBT]	= Normal_Index16_Byte;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX16][FORMAT_USHORT][NRM_NBT]	= Normal_Index16_Short; //HACK
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX16][FORMAT_SHORT] [NRM_NBT]	= Normal_Index16_Short;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX16][FORMAT_FLOAT] [NRM_NBT]	= Normal_Index16_Float;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX16][FORMAT_UBYTE] [NRM_NBT3]	= Normal_Index16_Byte3;	//HACK
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX16][FORMAT_BYTE]  [NRM_NBT3]	= Normal_Index16_Byte3;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX16][FORMAT_USHORT][NRM_NBT3]	= Normal_Index16_Short3; //HACK
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX16][FORMAT_SHORT] [NRM_NBT3]	= Normal_Index16_Short3;
							 | 
						||
| 
								 | 
							
									m_funcTable[NRM_INDEX16][FORMAT_FLOAT] [NRM_NBT3]	= Normal_Index16_Float3;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// GetSize
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								unsigned int
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::GetSize(unsigned int _type, unsigned int _format, unsigned int _elements)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return m_sizeTable[_type][_format][_elements];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// GetFunction
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								TPipelineFunction
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::GetFunction(unsigned int _type, unsigned int _format, unsigned int _elements)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									TPipelineFunction pFunc = m_funcTable[_type][_format][_elements];
							 | 
						||
| 
								 | 
							
									return pFunc;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// --- Direct ---
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								/////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_DirectByte
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_DirectByte(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									varray->SetNormalX(0, ((float)(signed char)ReadBuffer8()+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
									varray->SetNormalY(0, ((float)(signed char)ReadBuffer8()+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
									varray->SetNormalZ(0, ((float)(signed char)ReadBuffer8()+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_DirectShort
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_DirectShort(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									varray->SetNormalX(0, ((float)(signed short)ReadBuffer16()+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
									varray->SetNormalY(0, ((float)(signed short)ReadBuffer16()+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
									varray->SetNormalZ(0, ((float)(signed short)ReadBuffer16()+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_DirectFloat
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_DirectFloat(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									varray->SetNormalX(0, ReadBuffer32F());
							 | 
						||
| 
								 | 
							
									varray->SetNormalY(0, ReadBuffer32F());
							 | 
						||
| 
								 | 
							
									varray->SetNormalZ(0, ReadBuffer32F());
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_DirectByte3
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_DirectByte3(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										varray->SetNormalX(i, ((float)(signed char)ReadBuffer8()+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
										varray->SetNormalY(i, ((float)(signed char)ReadBuffer8()+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
										varray->SetNormalZ(i, ((float)(signed char)ReadBuffer8()+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_DirectShort3
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_DirectShort3(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										varray->SetNormalX(i, ((float)(signed short)ReadBuffer16()+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
										varray->SetNormalY(i, ((float)(signed short)ReadBuffer16()+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
										varray->SetNormalZ(i, ((float)(signed short)ReadBuffer16()+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_DirectFloat3
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_DirectFloat3(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										varray->SetNormalX(i, ReadBuffer32F());
							 | 
						||
| 
								 | 
							
										varray->SetNormalY(i, ReadBuffer32F());
							 | 
						||
| 
								 | 
							
										varray->SetNormalZ(i, ReadBuffer32F());
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// --- Index8 ---
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								/////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_Index8_Byte
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_Index8_Byte(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									u8 Index = ReadBuffer8();
							 | 
						||
| 
								 | 
							
									u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									varray->SetNormalX(0, ((float)(signed char)Memory_Read_U8(iAddress  )+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
									varray->SetNormalY(0, ((float)(signed char)Memory_Read_U8(iAddress+1)+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
									varray->SetNormalZ(0, ((float)(signed char)Memory_Read_U8(iAddress+2)+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_Index8_Short
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_Index8_Short(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									u8 Index = ReadBuffer8();
							 | 
						||
| 
								 | 
							
									u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									varray->SetNormalX(0, ((float)(signed short)Memory_Read_U16(iAddress  )+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
									varray->SetNormalY(0, ((float)(signed short)Memory_Read_U16(iAddress+2)+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
									varray->SetNormalZ(0, ((float)(signed short)Memory_Read_U16(iAddress+4)+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_Index8_Float
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_Index8_Float(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									u8 Index = ReadBuffer8();
							 | 
						||
| 
								 | 
							
									u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									varray->SetNormalX(0, Memory_Read_Float(iAddress));
							 | 
						||
| 
								 | 
							
									varray->SetNormalY(0, Memory_Read_Float(iAddress+4));
							 | 
						||
| 
								 | 
							
									varray->SetNormalZ(0, Memory_Read_Float(iAddress+8));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_Index8_Byte3
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_Index8_Byte3(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if (index3)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											u8 Index = ReadBuffer8();
							 | 
						||
| 
								 | 
							
											u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 1*3*i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											varray->SetNormalX(i, ((float)(signed char)Memory_Read_U8(iAddress  )+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalY(i, ((float)(signed char)Memory_Read_U8(iAddress+1)+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalZ(i, ((float)(signed char)Memory_Read_U8(iAddress+2)+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										u8 Index = ReadBuffer8();
							 | 
						||
| 
								 | 
							
										for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 1*3*i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											varray->SetNormalX(i, ((float)(signed char)Memory_Read_U8(iAddress  )+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalY(i, ((float)(signed char)Memory_Read_U8(iAddress+1)+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalZ(i, ((float)(signed char)Memory_Read_U8(iAddress+2)+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_Index8_Short3
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_Index8_Short3(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if (index3)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											u8 Index = ReadBuffer8();
							 | 
						||
| 
								 | 
							
											u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 2*3*i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											varray->SetNormalX(i, ((float)(signed short)Memory_Read_U16(iAddress  )+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalY(i, ((float)(signed short)Memory_Read_U16(iAddress+2)+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalZ(i, ((float)(signed short)Memory_Read_U16(iAddress+4)+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										u8 Index = ReadBuffer8();
							 | 
						||
| 
								 | 
							
										for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 2*3*i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											varray->SetNormalX(i, ((float)(signed short)Memory_Read_U16(iAddress  )+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalY(i, ((float)(signed short)Memory_Read_U16(iAddress+2)+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalZ(i, ((float)(signed short)Memory_Read_U16(iAddress+4)+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_Index8_Float3
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_Index8_Float3(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if (index3)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											u8 Index = ReadBuffer8();
							 | 
						||
| 
								 | 
							
											u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 4*3*i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											varray->SetNormalX(i, Memory_Read_Float(iAddress));
							 | 
						||
| 
								 | 
							
											varray->SetNormalY(i, Memory_Read_Float(iAddress+4));
							 | 
						||
| 
								 | 
							
											varray->SetNormalZ(i, Memory_Read_Float(iAddress+8));
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										u8 Index = ReadBuffer8();
							 | 
						||
| 
								 | 
							
										for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 4*3*i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											varray->SetNormalX(i, Memory_Read_Float(iAddress));
							 | 
						||
| 
								 | 
							
											varray->SetNormalY(i, Memory_Read_Float(iAddress+4));
							 | 
						||
| 
								 | 
							
											varray->SetNormalZ(i, Memory_Read_Float(iAddress+8));
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// --- Index16 ---
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								/////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_Index16_Byte
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_Index16_Byte(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									u16 Index = ReadBuffer16();
							 | 
						||
| 
								 | 
							
									u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									varray->SetNormalX(0, ((float)(signed char)Memory_Read_U8(iAddress  )+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
									varray->SetNormalY(0, ((float)(signed char)Memory_Read_U8(iAddress+1)+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
									varray->SetNormalZ(0, ((float)(signed char)Memory_Read_U8(iAddress+2)+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_Index16_Short
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_Index16_Short(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									u16 Index = ReadBuffer16();
							 | 
						||
| 
								 | 
							
									u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									varray->SetNormalX(0, ((float)(signed short)Memory_Read_U16(iAddress  )+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
									varray->SetNormalY(0, ((float)(signed short)Memory_Read_U16(iAddress+2)+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
									varray->SetNormalZ(0, ((float)(signed short)Memory_Read_U16(iAddress+4)+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_Index8_Float
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_Index16_Float(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									u16 Index = ReadBuffer16();
							 | 
						||
| 
								 | 
							
									u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									varray->SetNormalX(0, Memory_Read_Float(iAddress));
							 | 
						||
| 
								 | 
							
									varray->SetNormalY(0, Memory_Read_Float(iAddress+4));
							 | 
						||
| 
								 | 
							
									varray->SetNormalZ(0, Memory_Read_Float(iAddress+8));
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_Index16_Byte3
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_Index16_Byte3(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if (index3)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											u16 Index = ReadBuffer16();
							 | 
						||
| 
								 | 
							
											u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 1*3*i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											varray->SetNormalX(i, ((float)(signed char)Memory_Read_U8(iAddress  )+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalY(i, ((float)(signed char)Memory_Read_U8(iAddress+1)+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalZ(i, ((float)(signed char)Memory_Read_U8(iAddress+2)+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										u16 Index = ReadBuffer16();
							 | 
						||
| 
								 | 
							
										for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 1*3*i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											varray->SetNormalX(i, ((float)(signed char)Memory_Read_U8(iAddress  )+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalY(i, ((float)(signed char)Memory_Read_U8(iAddress+1)+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalZ(i, ((float)(signed char)Memory_Read_U8(iAddress+2)+0.5f) / 127.5f);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_Index16_Short3
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_Index16_Short3(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if (index3)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											u16 Index = ReadBuffer16();
							 | 
						||
| 
								 | 
							
											u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 2*3*i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											varray->SetNormalX(i, ((float)(signed short)Memory_Read_U16(iAddress  )+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalY(i, ((float)(signed short)Memory_Read_U16(iAddress+2)+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalZ(i, ((float)(signed short)Memory_Read_U16(iAddress+4)+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										u16 Index = ReadBuffer16();
							 | 
						||
| 
								 | 
							
										for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 2*3*i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											varray->SetNormalX(i, ((float)(signed short)Memory_Read_U16(iAddress  )+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalY(i, ((float)(signed short)Memory_Read_U16(iAddress+2)+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
											varray->SetNormalZ(i, ((float)(signed short)Memory_Read_U16(iAddress+4)+0.5f) / 32767.5f);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// __________________________________________________________________________________________________
							 | 
						||
| 
								 | 
							
								// Normal_Index16_Float3
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								void LOADERDECL 
							 | 
						||
| 
								 | 
							
								VertexLoader_Normal::Normal_Index16_Float3(void* _p)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									if (index3)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											u16 Index = ReadBuffer16();
							 | 
						||
| 
								 | 
							
											u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 4*3*i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											varray->SetNormalX(i, Memory_Read_Float(iAddress  ));
							 | 
						||
| 
								 | 
							
											varray->SetNormalY(i, Memory_Read_Float(iAddress+4));
							 | 
						||
| 
								 | 
							
											varray->SetNormalZ(i, Memory_Read_Float(iAddress+8));
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										u16 Index = ReadBuffer16();
							 | 
						||
| 
								 | 
							
										for (int i=0; i<3; i++)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											u32 iAddress = arraybases[ARRAY_NORMAL] + (Index * arraystrides[ARRAY_NORMAL]) + 4*3*i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											varray->SetNormalX(i, Memory_Read_Float(iAddress  ));
							 | 
						||
| 
								 | 
							
											varray->SetNormalY(i, Memory_Read_Float(iAddress+4));
							 | 
						||
| 
								 | 
							
											varray->SetNormalZ(i, Memory_Read_Float(iAddress+8));
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |