1 //--------------------------------------------------------------------------------------
\r
5 // The SDK Mesh format (.sdkmesh) is not a recommended file format for shipping titles.
\r
6 // It was designed to meet the specific needs of the SDK samples. Any real-world
\r
7 // applications should avoid this file format in favor of a destination format that
\r
8 // meets the specific needs of the application.
\r
10 // Copyright (c) Microsoft Corporation. All rights reserved.
\r
11 //--------------------------------------------------------------------------------------
\r
16 //--------------------------------------------------------------------------------------
\r
17 // Hard Defines for the various structures
\r
18 //--------------------------------------------------------------------------------------
\r
19 #define SDKMESH_FILE_VERSION 101
\r
20 #define MAX_VERTEX_ELEMENTS 32
\r
21 #define MAX_VERTEX_STREAMS 16
\r
22 #define MAX_FRAME_NAME 100
\r
23 #define MAX_MESH_NAME 100
\r
24 #define MAX_SUBSET_NAME 100
\r
25 #define MAX_MATERIAL_NAME 100
\r
26 #define MAX_TEXTURE_NAME MAX_PATH
\r
27 #define MAX_MATERIAL_PATH MAX_PATH
\r
28 #define INVALID_FRAME ((UINT)-1)
\r
29 #define INVALID_MESH ((UINT)-1)
\r
30 #define INVALID_MATERIAL ((UINT)-1)
\r
31 #define INVALID_SUBSET ((UINT)-1)
\r
32 #define INVALID_ANIMATION_DATA ((UINT)-1)
\r
33 #define INVALID_SAMPLER_SLOT ((UINT)-1)
\r
34 #define ERROR_RESOURCE_VALUE 1
\r
36 template<typename TYPE> BOOL IsErrorResource( TYPE data )
\r
38 if( ( TYPE )ERROR_RESOURCE_VALUE == data )
\r
42 //--------------------------------------------------------------------------------------
\r
43 // Enumerated Types. These will have mirrors in both D3D9 and D3D11
\r
44 //--------------------------------------------------------------------------------------
\r
45 enum SDKMESH_PRIMITIVE_TYPE
\r
47 PT_TRIANGLE_LIST = 0,
\r
52 PT_TRIANGLE_LIST_ADJ,
\r
53 PT_TRIANGLE_STRIP_ADJ,
\r
57 PT_TRIANGLE_PATCH_LIST,
\r
60 enum SDKMESH_INDEX_TYPE
\r
66 enum FRAME_TRANSFORM_TYPE
\r
69 FTT_ABSOLUTE, //This is not currently used but is here to support absolute transformations in the future
\r
72 //--------------------------------------------------------------------------------------
\r
73 // Structures. Unions with pointers are forced to 64bit.
\r
74 //--------------------------------------------------------------------------------------
\r
75 struct SDKMESH_HEADER
\r
77 //Basic Info and sizes
\r
81 UINT64 NonBufferDataSize;
\r
82 UINT64 BufferDataSize;
\r
85 UINT NumVertexBuffers;
\r
86 UINT NumIndexBuffers;
\r
88 UINT NumTotalSubsets;
\r
93 UINT64 VertexStreamHeadersOffset;
\r
94 UINT64 IndexStreamHeadersOffset;
\r
95 UINT64 MeshDataOffset;
\r
96 UINT64 SubsetDataOffset;
\r
97 UINT64 FrameDataOffset;
\r
98 UINT64 MaterialDataOffset;
\r
101 struct SDKMESH_VERTEX_BUFFER_HEADER
\r
103 UINT64 NumVertices;
\r
105 UINT64 StrideBytes;
\r
106 D3DVERTEXELEMENT9 Decl[MAX_VERTEX_ELEMENTS];
\r
109 UINT64 DataOffset; //(This also forces the union to 64bits)
\r
110 IDirect3DVertexBuffer9* pVB9;
\r
111 ID3D11Buffer* pVB11;
\r
115 struct SDKMESH_INDEX_BUFFER_HEADER
\r
122 UINT64 DataOffset; //(This also forces the union to 64bits)
\r
123 IDirect3DIndexBuffer9* pIB9;
\r
124 ID3D11Buffer* pIB11;
\r
128 struct SDKMESH_MESH
\r
130 char Name[MAX_MESH_NAME];
\r
131 BYTE NumVertexBuffers;
\r
132 UINT VertexBuffers[MAX_VERTEX_STREAMS];
\r
135 UINT NumFrameInfluences; //aka bones
\r
137 D3DXVECTOR3 BoundingBoxCenter;
\r
138 D3DXVECTOR3 BoundingBoxExtents;
\r
142 UINT64 SubsetOffset; //Offset to list of subsets (This also forces the union to 64bits)
\r
143 UINT* pSubsets; //Pointer to list of subsets
\r
147 UINT64 FrameInfluenceOffset; //Offset to list of frame influences (This also forces the union to 64bits)
\r
148 UINT* pFrameInfluences; //Pointer to list of frame influences
\r
152 struct SDKMESH_SUBSET
\r
154 char Name[MAX_SUBSET_NAME];
\r
156 UINT PrimitiveType;
\r
159 UINT64 VertexStart;
\r
160 UINT64 VertexCount;
\r
163 struct SDKMESH_FRAME
\r
165 char Name[MAX_FRAME_NAME];
\r
171 UINT AnimationDataIndex; //Used to index which set of keyframes transforms this frame
\r
174 struct SDKMESH_MATERIAL
\r
176 char Name[MAX_MATERIAL_NAME];
\r
178 // Use MaterialInstancePath
\r
179 char MaterialInstancePath[MAX_MATERIAL_PATH];
\r
181 // Or fall back to d3d8-type materials
\r
182 char DiffuseTexture[MAX_TEXTURE_NAME];
\r
183 char NormalTexture[MAX_TEXTURE_NAME];
\r
184 char SpecularTexture[MAX_TEXTURE_NAME];
\r
186 D3DXVECTOR4 Diffuse;
\r
187 D3DXVECTOR4 Ambient;
\r
188 D3DXVECTOR4 Specular;
\r
189 D3DXVECTOR4 Emissive;
\r
194 UINT64 Force64_1; //Force the union to 64bits
\r
195 IDirect3DTexture9* pDiffuseTexture9;
\r
196 ID3D11Texture2D* pDiffuseTexture11;
\r
200 UINT64 Force64_2; //Force the union to 64bits
\r
201 IDirect3DTexture9* pNormalTexture9;
\r
202 ID3D11Texture2D* pNormalTexture11;
\r
206 UINT64 Force64_3; //Force the union to 64bits
\r
207 IDirect3DTexture9* pSpecularTexture9;
\r
208 ID3D11Texture2D* pSpecularTexture11;
\r
213 UINT64 Force64_4; //Force the union to 64bits
\r
214 ID3D11ShaderResourceView* pDiffuseRV11;
\r
218 UINT64 Force64_5; //Force the union to 64bits
\r
219 ID3D11ShaderResourceView* pNormalRV11;
\r
223 UINT64 Force64_6; //Force the union to 64bits
\r
224 ID3D11ShaderResourceView* pSpecularRV11;
\r
229 struct SDKANIMATION_FILE_HEADER
\r
233 UINT FrameTransformType;
\r
235 UINT NumAnimationKeys;
\r
237 UINT64 AnimationDataSize;
\r
238 UINT64 AnimationDataOffset;
\r
241 struct SDKANIMATION_DATA
\r
243 D3DXVECTOR3 Translation;
\r
244 D3DXVECTOR4 Orientation;
\r
245 D3DXVECTOR3 Scaling;
\r
248 struct SDKANIMATION_FRAME_DATA
\r
250 char FrameName[MAX_FRAME_NAME];
\r
254 SDKANIMATION_DATA* pAnimationData;
\r
258 #ifndef _CONVERTER_APP_
\r
260 //--------------------------------------------------------------------------------------
\r
261 // AsyncLoading callbacks
\r
262 //--------------------------------------------------------------------------------------
\r
263 typedef void ( CALLBACK*LPCREATETEXTUREFROMFILE9 )( IDirect3DDevice9* pDev, char* szFileName,
\r
264 IDirect3DTexture9** ppTexture, void* pContext );
\r
265 typedef void ( CALLBACK*LPCREATEVERTEXBUFFER9 )( IDirect3DDevice9* pDev, IDirect3DVertexBuffer9** ppBuffer,
\r
266 UINT iSizeBytes, DWORD Usage, DWORD FVF, D3DPOOL Pool, void* pData,
\r
268 typedef void ( CALLBACK*LPCREATEINDEXBUFFER9 )( IDirect3DDevice9* pDev, IDirect3DIndexBuffer9** ppBuffer,
\r
269 UINT iSizeBytes, DWORD Usage, D3DFORMAT ibFormat, D3DPOOL Pool,
\r
270 void* pData, void* pContext );
\r
271 struct SDKMESH_CALLBACKS9
\r
273 LPCREATETEXTUREFROMFILE9 pCreateTextureFromFile;
\r
274 LPCREATEVERTEXBUFFER9 pCreateVertexBuffer;
\r
275 LPCREATEINDEXBUFFER9 pCreateIndexBuffer;
\r
280 typedef void ( CALLBACK*LPCREATETEXTUREFROMFILE11 )( ID3D11Device* pDev, char* szFileName,
\r
281 ID3D11ShaderResourceView** ppRV, void* pContext );
\r
282 typedef void ( CALLBACK*LPCREATEVERTEXBUFFER11 )( ID3D11Device* pDev, ID3D11Buffer** ppBuffer,
\r
283 D3D11_BUFFER_DESC BufferDesc, void* pData, void* pContext );
\r
284 typedef void ( CALLBACK*LPCREATEINDEXBUFFER11 )( ID3D11Device* pDev, ID3D11Buffer** ppBuffer,
\r
285 D3D11_BUFFER_DESC BufferDesc, void* pData, void* pContext );
\r
286 struct SDKMESH_CALLBACKS11
\r
288 LPCREATETEXTUREFROMFILE11 pCreateTextureFromFile;
\r
289 LPCREATEVERTEXBUFFER11 pCreateVertexBuffer;
\r
290 LPCREATEINDEXBUFFER11 pCreateIndexBuffer;
\r
294 //--------------------------------------------------------------------------------------
\r
295 // CDXUTSDKMesh class. This class reads the sdkmesh file format for use by the samples
\r
296 //--------------------------------------------------------------------------------------
\r
300 UINT m_NumOutstandingResources;
\r
302 //BYTE* m_pBufferData;
\r
304 HANDLE m_hFileMappingObject;
\r
305 CGrowableArray <BYTE*> m_MappedPointers;
\r
306 IDirect3DDevice9* m_pDev9;
\r
307 ID3D11Device* m_pDev11;
\r
308 ID3D11DeviceContext* m_pDevContext11;
\r
311 //These are the pointers to the two chunks of data loaded in from the mesh file
\r
312 BYTE* m_pStaticMeshData;
\r
314 BYTE* m_pAnimationData;
\r
315 BYTE** m_ppVertices;
\r
316 BYTE** m_ppIndices;
\r
318 //Keep track of the path
\r
319 WCHAR m_strPathW[MAX_PATH];
\r
320 char m_strPath[MAX_PATH];
\r
322 //General mesh info
\r
323 SDKMESH_HEADER* m_pMeshHeader;
\r
324 SDKMESH_VERTEX_BUFFER_HEADER* m_pVertexBufferArray;
\r
325 SDKMESH_INDEX_BUFFER_HEADER* m_pIndexBufferArray;
\r
326 SDKMESH_MESH* m_pMeshArray;
\r
327 SDKMESH_SUBSET* m_pSubsetArray;
\r
328 SDKMESH_FRAME* m_pFrameArray;
\r
329 SDKMESH_MATERIAL* m_pMaterialArray;
\r
331 // Adjacency information (not part of the m_pStaticMeshData, so it must be created and destroyed separately )
\r
332 SDKMESH_INDEX_BUFFER_HEADER* m_pAdjacencyIndexBufferArray;
\r
334 //Animation (TODO: Add ability to load/track multiple animation sets)
\r
335 SDKANIMATION_FILE_HEADER* m_pAnimationHeader;
\r
336 SDKANIMATION_FRAME_DATA* m_pAnimationFrameData;
\r
337 D3DXMATRIX* m_pBindPoseFrameMatrices;
\r
338 D3DXMATRIX* m_pTransformedFrameMatrices;
\r
339 D3DXMATRIX* m_pWorldPoseFrameMatrices;
\r
342 void LoadMaterials( ID3D11Device* pd3dDevice, SDKMESH_MATERIAL* pMaterials,
\r
343 UINT NumMaterials, SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL );
\r
345 void LoadMaterials( IDirect3DDevice9* pd3dDevice, SDKMESH_MATERIAL* pMaterials,
\r
346 UINT NumMaterials, SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL );
\r
348 HRESULT CreateVertexBuffer( ID3D11Device* pd3dDevice,
\r
349 SDKMESH_VERTEX_BUFFER_HEADER* pHeader, void* pVertices,
\r
350 SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL );
\r
351 HRESULT CreateVertexBuffer( IDirect3DDevice9* pd3dDevice,
\r
352 SDKMESH_VERTEX_BUFFER_HEADER* pHeader, void* pVertices,
\r
353 SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL );
\r
355 HRESULT CreateIndexBuffer( ID3D11Device* pd3dDevice, SDKMESH_INDEX_BUFFER_HEADER* pHeader,
\r
356 void* pIndices, SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL );
\r
357 HRESULT CreateIndexBuffer( IDirect3DDevice9* pd3dDevice,
\r
358 SDKMESH_INDEX_BUFFER_HEADER* pHeader, void* pIndices,
\r
359 SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL );
\r
361 virtual HRESULT CreateFromFile( ID3D11Device* pDev11,
\r
362 IDirect3DDevice9* pDev9,
\r
363 LPCTSTR szFileName,
\r
364 bool bCreateAdjacencyIndices,
\r
365 SDKMESH_CALLBACKS11* pLoaderCallbacks11 = NULL,
\r
366 SDKMESH_CALLBACKS9* pLoaderCallbacks9 = NULL );
\r
368 virtual HRESULT CreateFromMemory( ID3D11Device* pDev11,
\r
369 IDirect3DDevice9* pDev9,
\r
372 bool bCreateAdjacencyIndices,
\r
374 SDKMESH_CALLBACKS11* pLoaderCallbacks11 = NULL,
\r
375 SDKMESH_CALLBACKS9* pLoaderCallbacks9 = NULL );
\r
377 //frame manipulation
\r
378 void TransformBindPoseFrame( UINT iFrame, D3DXMATRIX* pParentWorld );
\r
379 void TransformFrame( UINT iFrame, D3DXMATRIX* pParentWorld, double fTime );
\r
380 void TransformFrameAbsolute( UINT iFrame, double fTime );
\r
382 //Direct3D 11 rendering helpers
\r
383 void RenderMesh( UINT iMesh,
\r
385 ID3D11DeviceContext* pd3dDeviceContext,
\r
388 UINT iSpecularSlot );
\r
389 void RenderFrame( UINT iFrame,
\r
391 ID3D11DeviceContext* pd3dDeviceContext,
\r
394 UINT iSpecularSlot );
\r
397 //Direct3D 9 rendering helpers
\r
398 void RenderMesh( UINT iMesh,
\r
399 LPDIRECT3DDEVICE9 pd3dDevice,
\r
400 LPD3DXEFFECT pEffect,
\r
401 D3DXHANDLE hTechnique,
\r
402 D3DXHANDLE htxDiffuse,
\r
403 D3DXHANDLE htxNormal,
\r
404 D3DXHANDLE htxSpecular );
\r
405 void RenderFrame( UINT iFrame,
\r
406 LPDIRECT3DDEVICE9 pd3dDevice,
\r
407 LPD3DXEFFECT pEffect,
\r
408 D3DXHANDLE hTechnique,
\r
409 D3DXHANDLE htxDiffuse,
\r
410 D3DXHANDLE htxNormal,
\r
411 D3DXHANDLE htxSpecular );
\r
415 virtual ~CDXUTSDKMesh();
\r
417 virtual HRESULT Create( ID3D11Device* pDev11, LPCTSTR szFileName, bool bCreateAdjacencyIndices=
\r
418 false, SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL );
\r
419 virtual HRESULT Create( IDirect3DDevice9* pDev9, LPCTSTR szFileName, bool bCreateAdjacencyIndices=
\r
420 false, SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL );
\r
421 virtual HRESULT Create( ID3D11Device* pDev11, BYTE* pData, UINT DataBytes,
\r
422 bool bCreateAdjacencyIndices=false, bool bCopyStatic=false,
\r
423 SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL );
\r
424 virtual HRESULT Create( IDirect3DDevice9* pDev9, BYTE* pData, UINT DataBytes,
\r
425 bool bCreateAdjacencyIndices=false, bool bCopyStatic=false,
\r
426 SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL );
\r
427 virtual HRESULT LoadAnimation( WCHAR* szFileName );
\r
428 virtual void Destroy();
\r
430 //Frame manipulation
\r
431 void TransformBindPose( D3DXMATRIX* pWorld );
\r
432 void TransformMesh( D3DXMATRIX* pWorld, double fTime );
\r
435 //Direct3D 11 Rendering
\r
436 virtual void Render( ID3D11DeviceContext* pd3dDeviceContext,
\r
437 UINT iDiffuseSlot = INVALID_SAMPLER_SLOT,
\r
438 UINT iNormalSlot = INVALID_SAMPLER_SLOT,
\r
439 UINT iSpecularSlot = INVALID_SAMPLER_SLOT );
\r
440 virtual void RenderAdjacent( ID3D11DeviceContext* pd3dDeviceContext,
\r
441 UINT iDiffuseSlot = INVALID_SAMPLER_SLOT,
\r
442 UINT iNormalSlot = INVALID_SAMPLER_SLOT,
\r
443 UINT iSpecularSlot = INVALID_SAMPLER_SLOT );
\r
445 //Direct3D 9 Rendering
\r
446 virtual void Render( LPDIRECT3DDEVICE9 pd3dDevice,
\r
447 LPD3DXEFFECT pEffect,
\r
448 D3DXHANDLE hTechnique,
\r
449 D3DXHANDLE htxDiffuse = 0,
\r
450 D3DXHANDLE htxNormal = 0,
\r
451 D3DXHANDLE htxSpecular = 0 );
\r
453 //Helpers (D3D11 specific)
\r
454 static D3D11_PRIMITIVE_TOPOLOGY GetPrimitiveType11( SDKMESH_PRIMITIVE_TYPE PrimType );
\r
455 DXGI_FORMAT GetIBFormat11( UINT iMesh );
\r
456 ID3D11Buffer* GetVB11( UINT iMesh, UINT iVB );
\r
457 ID3D11Buffer* GetIB11( UINT iMesh );
\r
458 SDKMESH_INDEX_TYPE GetIndexType( UINT iMesh );
\r
460 ID3D11Buffer* GetAdjIB11( UINT iMesh );
\r
462 //Helpers (D3D9 specific)
\r
463 static D3DPRIMITIVETYPE GetPrimitiveType9( SDKMESH_PRIMITIVE_TYPE PrimType );
\r
464 D3DFORMAT GetIBFormat9( UINT iMesh );
\r
465 IDirect3DVertexBuffer9* GetVB9( UINT iMesh, UINT iVB );
\r
466 IDirect3DIndexBuffer9* GetIB9( UINT iMesh );
\r
468 //Helpers (general)
\r
469 char* GetMeshPathA();
\r
470 WCHAR* GetMeshPathW();
\r
471 UINT GetNumMeshes();
\r
472 UINT GetNumMaterials();
\r
476 ID3D11Buffer* GetVB11At( UINT iVB );
\r
477 ID3D11Buffer* GetIB11At( UINT iIB );
\r
479 IDirect3DVertexBuffer9* GetVB9At( UINT iVB );
\r
480 IDirect3DIndexBuffer9* GetIB9At( UINT iIB );
\r
482 BYTE* GetRawVerticesAt( UINT iVB );
\r
483 BYTE* GetRawIndicesAt( UINT iIB );
\r
484 SDKMESH_MATERIAL* GetMaterial( UINT iMaterial );
\r
485 SDKMESH_MESH* GetMesh( UINT iMesh );
\r
486 UINT GetNumSubsets( UINT iMesh );
\r
487 SDKMESH_SUBSET* GetSubset( UINT iMesh, UINT iSubset );
\r
488 UINT GetVertexStride( UINT iMesh, UINT iVB );
\r
489 UINT GetNumFrames();
\r
490 SDKMESH_FRAME* GetFrame( UINT iFrame );
\r
491 SDKMESH_FRAME* FindFrame( char* pszName );
\r
492 UINT64 GetNumVertices( UINT iMesh, UINT iVB );
\r
493 UINT64 GetNumIndices( UINT iMesh );
\r
494 D3DXVECTOR3 GetMeshBBoxCenter( UINT iMesh );
\r
495 D3DXVECTOR3 GetMeshBBoxExtents( UINT iMesh );
\r
496 UINT GetOutstandingResources();
\r
497 UINT GetOutstandingBufferResources();
\r
498 bool CheckLoadDone();
\r
501 void SetLoading( bool bLoading );
\r
502 BOOL HadLoadingError();
\r
505 UINT GetNumInfluences( UINT iMesh );
\r
506 const D3DXMATRIX* GetMeshInfluenceMatrix( UINT iMesh, UINT iInfluence );
\r
507 UINT GetAnimationKeyFromTime( double fTime );
\r
508 const D3DXMATRIX* GetWorldMatrix( UINT iFrameIndex );
\r
509 const D3DXMATRIX* GetInfluenceMatrix( UINT iFrameIndex );
\r
510 bool GetAnimationProperties( UINT* pNumKeys, FLOAT* pFrameTime );
\r
513 //-----------------------------------------------------------------------------
\r
514 // Name: class CDXUTXFileMesh
\r
515 // Desc: Class for loading and rendering file-based meshes
\r
516 //-----------------------------------------------------------------------------
\r
517 class CDXUTXFileMesh
\r
520 WCHAR m_strName[512];
\r
521 LPD3DXMESH m_pMesh; // Managed mesh
\r
523 // Cache of data in m_pMesh for easy access
\r
524 IDirect3DVertexBuffer9* m_pVB;
\r
525 IDirect3DIndexBuffer9* m_pIB;
\r
526 IDirect3DVertexDeclaration9* m_pDecl;
\r
527 DWORD m_dwNumVertices;
\r
528 DWORD m_dwNumFaces;
\r
529 DWORD m_dwBytesPerVertex;
\r
531 DWORD m_dwNumMaterials; // Materials for the mesh
\r
532 D3DMATERIAL9* m_pMaterials;
\r
533 CHAR (*m_strMaterials )[MAX_PATH];
\r
534 IDirect3DBaseTexture9** m_pTextures;
\r
535 bool m_bUseMaterials;
\r
539 HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice,
\r
540 bool bDrawOpaqueSubsets = true,
\r
541 bool bDrawAlphaSubsets = true );
\r
542 HRESULT Render( ID3DXEffect* pEffect,
\r
543 D3DXHANDLE hTexture = NULL,
\r
544 D3DXHANDLE hDiffuse = NULL,
\r
545 D3DXHANDLE hAmbient = NULL,
\r
546 D3DXHANDLE hSpecular = NULL,
\r
547 D3DXHANDLE hEmissive = NULL,
\r
548 D3DXHANDLE hPower = NULL,
\r
549 bool bDrawOpaqueSubsets = true,
\r
550 bool bDrawAlphaSubsets = true );
\r
553 LPD3DXMESH GetMesh()
\r
558 // Rendering options
\r
559 void UseMeshMaterials( bool bFlag )
\r
561 m_bUseMaterials = bFlag;
\r
563 HRESULT SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF );
\r
564 HRESULT SetVertexDecl( LPDIRECT3DDEVICE9 pd3dDevice, const D3DVERTEXELEMENT9* pDecl,
\r
565 bool bAutoComputeNormals = true, bool bAutoComputeTangents = true,
\r
566 bool bSplitVertexForOptimalTangents = false );
\r
569 HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice );
\r
570 HRESULT InvalidateDeviceObjects();
\r
572 // Creation/destruction
\r
573 HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strFilename );
\r
574 HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPD3DXFILEDATA pFileData );
\r
575 HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, ID3DXMesh* pInMesh, D3DXMATERIAL* pd3dxMaterials,
\r
576 DWORD dwMaterials );
\r
577 HRESULT CreateMaterials( LPCWSTR strPath, IDirect3DDevice9* pd3dDevice, D3DXMATERIAL* d3dxMtrls,
\r
578 DWORD dwNumMaterials );
\r
581 CDXUTXFileMesh( LPCWSTR strName = L"CDXUTXMeshFile_Mesh" );
\r
582 virtual ~CDXUTXFileMesh();
\r