1 #include "..\include\raMain.h" 9 char strPath[MAX_PATH];
13 for( UINT m = 0; m < numMaterials; m++ )
23 if( pMaterials[m].DiffuseTexture[0] != 0 )
26 pMaterials[m].DiffuseTexture, &pMaterials[m].pDiffuseRV11,
29 if( pMaterials[m].NormalTexture[0] != 0 )
32 pMaterials[m].NormalTexture, &pMaterials[m].pNormalRV11,
35 if( pMaterials[m].SpecularTexture[0] != 0 )
38 pMaterials[m].SpecularTexture, &pMaterials[m].pSpecularRV11,
45 for( UINT m = 0; m < numMaterials; m++ )
55 if( pMaterials[m].DiffuseTexture[0] != 0 )
57 sprintf_s( strPath, MAX_PATH,
"%s%s", m_strPath, pMaterials[m].DiffuseTexture );
58 if( FAILED(
raResource::Instance().CreateTextureFromFile( pd3dDevice,strPath, &pMaterials[m].pDiffuseRV11,
true ) ) )
61 if( pMaterials[m].NormalTexture[0] != 0 )
63 sprintf_s( strPath, MAX_PATH,
"%s%s", m_strPath, pMaterials[m].NormalTexture );
64 if( FAILED(
raResource::Instance().CreateTextureFromFile( pd3dDevice, strPath, &pMaterials[m].pNormalRV11 ) ) )
67 if( pMaterials[m].SpecularTexture[0] != 0 )
69 sprintf_s( strPath, MAX_PATH,
"%s%s", m_strPath, pMaterials[m].SpecularTexture );
70 if( FAILED(
raResource::Instance().CreateTextureFromFile( pd3dDevice, strPath, &pMaterials[m].pSpecularRV11 ) ) )
82 D3D11_BUFFER_DESC bufferDesc;
83 bufferDesc.ByteWidth = ( UINT )( pHeader->
SizeBytes );
84 bufferDesc.Usage = D3D11_USAGE_DEFAULT;
85 bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
86 bufferDesc.CPUAccessFlags = 0;
87 bufferDesc.MiscFlags = 0;
96 D3D11_SUBRESOURCE_DATA InitData;
97 InitData.pSysMem = pVertices;
98 hr = pd3dDevice->
GetDevice()->CreateBuffer( &bufferDesc, &InitData, &pHeader->
pVB11 );
111 D3D11_BUFFER_DESC bufferDesc;
112 bufferDesc.ByteWidth = ( UINT )( pHeader->
SizeBytes );
113 bufferDesc.Usage = D3D11_USAGE_DEFAULT;
114 bufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
115 bufferDesc.CPUAccessFlags = 0;
116 bufferDesc.MiscFlags = 0;
125 D3D11_SUBRESOURCE_DATA InitData;
126 InitData.pSysMem = pIndices;
127 hr = pd3dDevice->
GetDevice()->CreateBuffer( &bufferDesc, &InitData, &pHeader->
pIB11 );
134 bool bCreateAdjacencyIndices,
140 m_hFile = CreateFile( szFileName, FILE_READ_DATA, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN,
142 if( INVALID_HANDLE_VALUE == m_hFile )
146 LARGE_INTEGER FileSize;
147 GetFileSizeEx( m_hFile, &FileSize );
148 UINT cBytes = FileSize.LowPart;
151 m_pStaticMeshData =
new BYTE[ cBytes ];
152 if( !m_pStaticMeshData )
154 CloseHandle( m_hFile );
155 return E_OUTOFMEMORY;
160 if( !ReadFile( m_hFile, m_pStaticMeshData, cBytes, &dwBytesRead, NULL ) )
163 CloseHandle( m_hFile );
165 if( SUCCEEDED( hr ) )
167 hr = CreateFromMemory( pDev11,
170 bCreateAdjacencyIndices,
174 delete []m_pStaticMeshData;
183 bool bCreateAdjacencyIndices,
194 m_NumOutstandingResources = 0;
201 m_pHeapData =
new BYTE[ StaticSize ];
205 m_pStaticMeshData = m_pHeapData;
207 CopyMemory( m_pStaticMeshData, pData, StaticSize );
212 m_pStaticMeshData =
pData;
218 m_pMeshHeader->VertexStreamHeadersOffset );
220 m_pMeshHeader->IndexStreamHeadersOffset );
221 m_pMeshArray = (
SDKMESH_MESH* )( m_pStaticMeshData + m_pMeshHeader->MeshDataOffset );
222 m_pSubsetArray = (
SDKMESH_SUBSET* )( m_pStaticMeshData + m_pMeshHeader->SubsetDataOffset );
223 m_pFrameArray = (
SDKMESH_FRAME* )( m_pStaticMeshData + m_pMeshHeader->FrameDataOffset );
224 m_pMaterialArray = (
SDKMESH_MATERIAL* )( m_pStaticMeshData + m_pMeshHeader->MaterialDataOffset );
227 for( UINT i = 0; i < m_pMeshHeader->NumMeshes; i++ )
229 m_pMeshArray[i].pSubsets = ( UINT* )( m_pStaticMeshData + m_pMeshArray[i].SubsetOffset );
230 m_pMeshArray[i].pFrameInfluences = ( UINT* )( m_pStaticMeshData + m_pMeshArray[i].FrameInfluenceOffset );
241 BYTE* pBufferData = pData + m_pMeshHeader->HeaderSize + m_pMeshHeader->NonBufferDataSize;
244 UINT64 BufferDataStart = m_pMeshHeader->HeaderSize + m_pMeshHeader->NonBufferDataSize;
247 m_ppVertices =
new BYTE*[m_pMeshHeader->NumVertexBuffers];
248 for( UINT i = 0; i < m_pMeshHeader->NumVertexBuffers; i++ )
250 BYTE* pVertices = NULL;
251 pVertices = ( BYTE* )( pBufferData + ( m_pVertexBufferArray[i].DataOffset - BufferDataStart ) );
253 CreateVertexBuffer( pDev11, &m_pVertexBufferArray[i], pVertices, pLoaderCallbacks11 );
255 m_ppVertices[i] = pVertices;
259 m_ppIndices =
new BYTE*[m_pMeshHeader->NumIndexBuffers];
260 for( UINT i = 0; i < m_pMeshHeader->NumIndexBuffers; i++ )
262 BYTE* pIndices = NULL;
263 pIndices = ( BYTE* )( pBufferData + ( m_pIndexBufferArray[i].DataOffset - BufferDataStart ) );
265 CreateIndexBuffer( pDev11, &m_pIndexBufferArray[i], pIndices, pLoaderCallbacks11 );
266 m_ppIndices[i] = pIndices;
271 LoadMaterials( pDev11, m_pMaterialArray, m_pMeshHeader->NumMaterials, pLoaderCallbacks11 );
274 m_pBindPoseFrameMatrices =
new D3DXMATRIX[ m_pMeshHeader->NumFrames ];
275 if( !m_pBindPoseFrameMatrices )
279 m_pTransformedFrameMatrices =
new D3DXMATRIX[ m_pMeshHeader->NumFrames ];
280 if( !m_pTransformedFrameMatrices )
282 m_pWorldPoseFrameMatrices =
new D3DXMATRIX[ m_pMeshHeader->NumFrames ];
283 if( !m_pWorldPoseFrameMatrices )
287 D3D11_PRIMITIVE_TOPOLOGY PrimType;
292 for (UINT meshi=0; meshi < m_pMeshHeader->NumMeshes; ++meshi) {
293 lower.x = FLT_MAX; lower.y = FLT_MAX; lower.z = FLT_MAX;
294 upper.x = -FLT_MAX; upper.y = -FLT_MAX; upper.z = -FLT_MAX;
295 currentMesh = GetMesh( meshi );
303 for( UINT subset = 0; subset < currentMesh->
NumSubsets; subset++ )
305 pSubset = GetSubset( meshi, subset );
308 assert( PrimType == D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
310 UINT IndexCount = ( UINT )pSubset->
IndexCount;
311 UINT IndexStart = ( UINT )pSubset->
IndexStart;
313 UINT *ind = ( UINT * )m_ppIndices[currentMesh->
IndexBuffer];
314 FLOAT *verts = ( FLOAT* )m_ppVertices[currentMesh->
VertexBuffers[0]];
315 UINT stride = (UINT)m_pVertexBufferArray[currentMesh->
VertexBuffers[0]].StrideBytes;
316 assert (stride % 4 == 0);
318 for (UINT vertind = IndexStart; vertind < IndexStart + IndexCount; ++vertind) {
321 UINT ind_div2 = vertind / 2;
322 current_ind = ind[ind_div2];
323 if (vertind %2 ==0) {
324 current_ind = current_ind << 16;
325 current_ind = current_ind >> 16;
327 current_ind = current_ind >> 16;
330 current_ind = ind[vertind];
333 D3DXVECTOR3 *pt = (D3DXVECTOR3*)&(verts[stride * current_ind]);
334 if (pt->x < lower.x) {
337 if (pt->y < lower.y) {
340 if (pt->z < lower.z) {
343 if (pt->x > upper.x) {
346 if (pt->y > upper.y) {
349 if (pt->z > upper.z) {
355 D3DXVECTOR3 half = upper - lower;
370 if( !m_pBindPoseFrameMatrices )
374 D3DXMATRIX LocalWorld;
375 D3DXMatrixMultiply( &LocalWorld, &m_pFrameArray[iFrame].Matrix, pParentWorld );
376 m_pBindPoseFrameMatrices[iFrame] = LocalWorld;
380 TransformBindPoseFrame( m_pFrameArray[iFrame].SiblingFrame, pParentWorld );
384 TransformBindPoseFrame( m_pFrameArray[iFrame].ChildFrame, &LocalWorld );
393 D3DXMATRIX LocalTransform;
394 UINT iTick = GetAnimationKeyFromTime( fTime );
403 D3DXMATRIX mTranslate;
404 D3DXMatrixTranslation( &mTranslate, parentPos.x, parentPos.y, parentPos.z );
412 if( quat.w == 0 && quat.x == 0 && quat.y == 0 && quat.z == 0 )
413 D3DXQuaternionIdentity( &quat );
414 D3DXQuaternionNormalize( &quat, &quat );
415 D3DXMatrixRotationQuaternion( &mQuat, &quat );
416 LocalTransform = ( mQuat * mTranslate );
420 LocalTransform = m_pFrameArray[iFrame].Matrix;
424 D3DXMATRIX LocalWorld;
425 D3DXMatrixMultiply( &LocalWorld, &LocalTransform, pParentWorld );
426 m_pTransformedFrameMatrices[iFrame] = LocalWorld;
427 m_pWorldPoseFrameMatrices[iFrame] = LocalWorld;
431 TransformFrame( m_pFrameArray[iFrame].SiblingFrame, pParentWorld, fTime );
435 TransformFrame( m_pFrameArray[iFrame].ChildFrame, &LocalWorld, fTime );
447 D3DXQUATERNION quat1;
448 D3DXQUATERNION quat2;
453 UINT iTick = GetAnimationKeyFromTime( fTime );
461 D3DXMatrixTranslation( &mTrans1, -pDataOrig->
Translation.x,
464 D3DXMatrixTranslation( &mTrans2, pData->
Translation.x,
472 D3DXQuaternionInverse( &quat1, &quat1 );
473 D3DXMatrixRotationQuaternion( &mRot1, &quat1 );
474 mInvTo = mTrans1 * mRot1;
480 D3DXMatrixRotationQuaternion( &mRot2, &quat2 );
481 mFrom = mRot2 * mTrans2;
483 D3DXMATRIX mOutput = mInvTo * mFrom;
484 m_pTransformedFrameMatrices[iFrame] = mOutput;
488 #define MAX_D3D11_VERTEX_STREAMS D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT 496 if( 0 < GetOutstandingBufferResources() )
510 pVB[i] = m_pVertexBufferArray[ pMesh->
VertexBuffers[i] ].pVB11;
511 Strides[i] = ( UINT )m_pVertexBufferArray[ pMesh->
VertexBuffers[i] ].StrideBytes;
517 pIndexBufferArray = m_pAdjacencyIndexBufferArray;
519 pIndexBufferArray = m_pIndexBufferArray;
522 DXGI_FORMAT ibFormat = DXGI_FORMAT_R16_UINT;
526 ibFormat = DXGI_FORMAT_R16_UINT;
529 ibFormat = DXGI_FORMAT_R32_UINT;
533 m_pDev11->GetImmediateContext()->IASetVertexBuffers( 0, pMesh->
NumVertexBuffers, pVB, Strides, Offsets );
534 m_pDev11->GetImmediateContext()->IASetIndexBuffer( pIB, ibFormat, 0 );
538 D3D11_PRIMITIVE_TOPOLOGY PrimType;
540 for( UINT subset = 0; subset < pMesh->
NumSubsets; subset++ )
542 pSubset = &m_pSubsetArray[ pMesh->
pSubsets[subset] ];
549 case D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST:
550 PrimType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ;
552 case D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP:
553 PrimType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ;
555 case D3D11_PRIMITIVE_TOPOLOGY_LINELIST:
556 PrimType = D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ;
558 case D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP:
559 PrimType = D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ;
564 m_pDev11->GetImmediateContext()->IASetPrimitiveTopology( PrimType );
566 pMat = &m_pMaterialArray[ pSubset->
MaterialID ];
568 m_pDev11->GetImmediateContext()->PSSetShaderResources( iDiffuseSlot, 1, &pMat->
pDiffuseRV11 );
570 m_pDev11->GetImmediateContext()->PSSetShaderResources( iNormalSlot, 1, &pMat->
pNormalRV11 );
572 m_pDev11->GetImmediateContext()->PSSetShaderResources( iSpecularSlot, 1, &pMat->
pSpecularRV11 );
574 UINT IndexCount = ( UINT )pSubset->
IndexCount;
575 UINT IndexStart = ( UINT )pSubset->
IndexStart;
583 m_pDev11->GetImmediateContext()->DrawIndexed( IndexCount, IndexStart, VertexStart );
594 if( !m_pStaticMeshData || !m_pFrameArray )
599 RenderMesh( m_pFrameArray[iFrame].Mesh,
608 RenderFrame( m_pFrameArray[iFrame].ChildFrame, bAdjacent, iDiffuseSlot,
609 iNormalSlot, iSpecularSlot );
613 RenderFrame( m_pFrameArray[iFrame].SiblingFrame, bAdjacent, iDiffuseSlot,
614 iNormalSlot, iSpecularSlot );
619 m_hFileMappingObject( 0 ),
620 m_pMeshHeader( NULL ),
621 m_pStaticMeshData( NULL ),
623 m_pAdjacencyIndexBufferArray( NULL ),
624 m_pAnimationData( NULL ),
625 m_pAnimationHeader( NULL ),
626 m_ppVertices( NULL ),
628 m_pBindPoseFrameMatrices( NULL ),
629 m_pTransformedFrameMatrices( NULL ),
630 m_pWorldPoseFrameMatrices( NULL ),
643 return CreateFromFile( pDev11, szFileName, bCreateAdjacencyIndices, pLoaderCallbacks);
648 return CreateFromMemory( pDev11, pData, DataBytes, bCreateAdjacencyIndices, bCopyStatic,
654 DWORD dwBytesRead = 0;
655 LARGE_INTEGER liMove;
658 HANDLE hFile = CreateFile( szFileName.c_str(), FILE_READ_DATA, FILE_SHARE_READ, NULL, OPEN_EXISTING,
659 FILE_FLAG_SEQUENTIAL_SCAN, NULL );
660 if( INVALID_HANDLE_VALUE == hFile )
679 if( !SetFilePointerEx( hFile, liMove, NULL, FILE_BEGIN ) )
704 CloseHandle( hFile );
792 D3DXMATRIX mInvBindPose;
798 m_pTransformedFrameMatrices[i] = mFinal;
813 RenderFrame( 0,
false, iDiffuseSlot, iNormalSlot, iSpecularSlot );
821 RenderFrame( 0,
true,iDiffuseSlot, iNormalSlot, iSpecularSlot );
825 D3D11_PRIMITIVE_TOPOLOGY retType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
830 retType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
833 retType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP;
836 retType = D3D11_PRIMITIVE_TOPOLOGY_LINELIST;
839 retType = D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP;
842 retType = D3D11_PRIMITIVE_TOPOLOGY_POINTLIST;
845 retType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ;
848 retType = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ;
851 retType = D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ;
854 retType = D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ;
867 return DXGI_FORMAT_R16_UINT;
869 return DXGI_FORMAT_R32_UINT;
871 return DXGI_FORMAT_R16_UINT;
993 assert( iFrame < m_pMeshHeader->NumFrames );
1002 if( _stricmp(
m_pFrameArray[i].Name, pszName.c_str() ) == 0 )
1037 UINT outstandingResources = 0;
1048 outstandingResources ++;
1054 outstandingResources ++;
1060 outstandingResources ++;
1064 return outstandingResources;
1101 m_bLoading = bLoading;
1163 UINT outstandingResources = 0;
1169 outstandingResources ++;
1174 outstandingResources ++;
1177 return outstandingResources;
SDKMESH_VERTEX_BUFFER_HEADER * m_pVertexBufferArray
UINT GetAnimationKeyFromTime(double fTime)
ID3D11ShaderResourceView * pSpecularRV11
SDKMESH_SUBSET * m_pSubsetArray
SDKANIMATION_DATA * pAnimationData
#define INVALID_ANIMATION_DATA
UINT64 GetNumIndices(UINT iMesh)
SDKMESH_FRAME * FindFrame(raString pszName)
BYTE * GetRawIndicesAt(UINT iIB)
static raResource & Instance()
ID3D11Texture2D * pDiffuseTexture11
UINT GetOutstandingResources()
void RenderFrame(UINT iFrame, bool bAdjacent, UINT iDiffuseSlot, UINT iNormalSlot, UINT iSpecularSlot)
virtual HRESULT CreateFromFile(raDirectX *pDev11, LPCTSTR szFileName, bool bCreateAdjacencyIndices, SDKMESH_CALLBACKS11 *pLoaderCallbacks11=NULL)
SDKMESH_FRAME * m_pFrameArray
DXGI_FORMAT GetIBFormat11(UINT iMesh)
void TransformBindPoseFrame(UINT iFrame, D3DXMATRIX *pParentWorld)
BOOL IsErrorResource(TYPE data)
bool GetAnimationProperties(UINT *pNumKeys, FLOAT *pFrameTime)
ID3D11Texture2D * pNormalTexture11
LPCREATEINDEXBUFFER11 pCreateIndexBuffer
virtual HRESULT CreateFromMemory(raDirectX *pDev11, BYTE *pData, UINT DataBytes, bool bCreateAdjacencyIndices, bool bCopyStatic, SDKMESH_CALLBACKS11 *pLoaderCallbacks11=NULL)
HRESULT CreateVertexBuffer(raDirectX *pd3dDevice, SDKMESH_VERTEX_BUFFER_HEADER *pHeader, void *pVertices, SDKMESH_CALLBACKS11 *pLoaderCallbacks=NULL)
ID3D11Buffer * GetAdjIB11(UINT iMesh)
static D3D11_PRIMITIVE_TOPOLOGY GetPrimitiveType11(SDKMESH_PRIMITIVE_TYPE PrimType)
SDKMESH_INDEX_BUFFER_HEADER * m_pIndexBufferArray
SDKMESH_INDEX_TYPE GetIndexType(UINT iMesh)
UINT GetOutstandingBufferResources()
#define SAFE_DELETE_ARRAY(p)
LPCREATEVERTEXBUFFER11 pCreateVertexBuffer
void RenderMesh(UINT iMesh, bool bAdjacent, UINT iDiffuseSlot, UINT iNormalSlot, UINT iSpecularSlot)
SDKANIMATION_FRAME_DATA * m_pAnimationFrameData
HRESULT CreateIndexBuffer(raDirectX *pd3dDevice, SDKMESH_INDEX_BUFFER_HEADER *pHeader, void *pIndices, SDKMESH_CALLBACKS11 *pLoaderCallbacks=NULL)
ID3D11Buffer * GetVB11(UINT iMesh, UINT iVB)
ID3D11Buffer * GetIB11(UINT iMesh)
UINT GetVertexStride(UINT iMesh, UINT iVB)
void TransformFrame(UINT iFrame, D3DXMATRIX *pParentWorld, double fTime)
ID3D11Device * GetDevice(void)
LPCREATETEXTUREFROMFILE11 pCreateTextureFromFile
SDKMESH_SUBSET * GetSubset(UINT iMesh, UINT iSubset)
const D3DXMATRIX * GetMeshInfluenceMatrix(UINT iMesh, UINT iInfluence)
const D3DXMATRIX * GetWorldMatrix(UINT iFrameIndex)
virtual void Render(UINT iDiffuseSlot=INVALID_SAMPLER_SLOT, UINT iNormalSlot=INVALID_SAMPLER_SLOT, UINT iSpecularSlot=INVALID_SAMPLER_SLOT)
SDKMESH_HEADER * m_pMeshHeader
void TransformMesh(D3DXMATRIX *pWorld, double fTime)
const D3DXMATRIX * GetInfluenceMatrix(UINT iFrameIndex)
ID3D11Buffer * GetIB11At(UINT iIB)
#define INVALID_SAMPLER_SLOT
D3DXMATRIX * m_pBindPoseFrameMatrices
SDKMESH_MATERIAL * m_pMaterialArray
SDKMESH_MESH * GetMesh(UINT iMesh)
SDKMESH_FRAME * GetFrame(UINT iFrame)
#define MAX_D3D11_VERTEX_STREAMS
#define ERROR_RESOURCE_VALUE
SDKMESH_MATERIAL * GetMaterial(UINT iMaterial)
#define SDKMESH_FILE_VERSION
ID3D11Buffer * GetVB11At(UINT iVB)
virtual HRESULT LoadAnimation(raString szFileName)
void TransformBindPose(D3DXMATRIX *pWorld)
ID3D11ShaderResourceView * pDiffuseRV11
SDKMESH_INDEX_BUFFER_HEADER * m_pAdjacencyIndexBufferArray
D3DXVECTOR3 GetMeshBBoxCenter(UINT iMesh)
virtual void RenderAdjacent(UINT iDiffuseSlot=INVALID_SAMPLER_SLOT, UINT iNormalSlot=INVALID_SAMPLER_SLOT, UINT iSpecularSlot=INVALID_SAMPLER_SLOT)
virtual HRESULT Create(raDirectX *pDev11, LPCTSTR szFileName, bool bCreateAdjacencyIndices=false, SDKMESH_CALLBACKS11 *pLoaderCallbacks=NULL)
D3DXVECTOR3 BoundingBoxCenter
SDKMESH_MESH * m_pMeshArray
D3DXVECTOR3 BoundingBoxExtents
D3DXVECTOR3 GetMeshBBoxExtents(UINT iMesh)
ID3D11Buffer D3D11_BUFFER_DESC void * pData
void LoadMaterials(raDirectX *pd3dDevice, SDKMESH_MATERIAL *pMaterials, UINT NumMaterials, SDKMESH_CALLBACKS11 *pLoaderCallbacks=NULL)
D3DXMATRIX * m_pTransformedFrameMatrices
BYTE * GetRawVerticesAt(UINT iVB)
UINT GetNumInfluences(UINT iMesh)
UINT VertexBuffers[MAX_VERTEX_STREAMS]
ID3D11Texture2D * pSpecularTexture11
UINT64 AnimationDataOffset
SDKANIMATION_FILE_HEADER * m_pAnimationHeader
void SetLoading(bool bLoading)
void TransformFrameAbsolute(UINT iFrame, double fTime)
ID3D11ShaderResourceView * pNormalRV11
UINT GetNumSubsets(UINT iMesh)
D3DXMATRIX * m_pWorldPoseFrameMatrices
UINT64 GetNumVertices(UINT iMesh, UINT iVB)