diff options
Diffstat (limited to 'samples/DX_APIUsage/DXUT/Optional/SDKmesh.h')
| -rw-r--r-- | samples/DX_APIUsage/DXUT/Optional/SDKmesh.h | 417 |
1 files changed, 142 insertions, 275 deletions
diff --git a/samples/DX_APIUsage/DXUT/Optional/SDKmesh.h b/samples/DX_APIUsage/DXUT/Optional/SDKmesh.h index 2032c52..8fba374 100644 --- a/samples/DX_APIUsage/DXUT/Optional/SDKmesh.h +++ b/samples/DX_APIUsage/DXUT/Optional/SDKmesh.h @@ -8,10 +8,14 @@ // meets the specific needs of the application. // // Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=320437 //-------------------------------------------------------------------------------------- #pragma once -#ifndef _SDKMESH_ -#define _SDKMESH_ + +#undef D3DCOLOR_ARGB +#include <d3d9.h> //-------------------------------------------------------------------------------------- // Hard Defines for the various structures @@ -40,7 +44,7 @@ template<typename TYPE> BOOL IsErrorResource( TYPE data ) return FALSE; } //-------------------------------------------------------------------------------------- -// Enumerated Types. These will have mirrors in both D3D9 and D3D11 +// Enumerated Types. //-------------------------------------------------------------------------------------- enum SDKMESH_PRIMITIVE_TYPE { @@ -72,6 +76,8 @@ enum FRAME_TRANSFORM_TYPE //-------------------------------------------------------------------------------------- // Structures. Unions with pointers are forced to 64bit. //-------------------------------------------------------------------------------------- +#pragma pack(push,8) + struct SDKMESH_HEADER { //Basic Info and sizes @@ -107,7 +113,6 @@ struct SDKMESH_VERTEX_BUFFER_HEADER union { UINT64 DataOffset; //(This also forces the union to 64bits) - IDirect3DVertexBuffer9* pVB9; ID3D11Buffer* pVB11; }; }; @@ -120,7 +125,6 @@ struct SDKMESH_INDEX_BUFFER_HEADER union { UINT64 DataOffset; //(This also forces the union to 64bits) - IDirect3DIndexBuffer9* pIB9; ID3D11Buffer* pIB11; }; }; @@ -134,8 +138,8 @@ struct SDKMESH_MESH UINT NumSubsets; UINT NumFrameInfluences; //aka bones - D3DXVECTOR3 BoundingBoxCenter; - D3DXVECTOR3 BoundingBoxExtents; + DirectX::XMFLOAT3 BoundingBoxCenter; + DirectX::XMFLOAT3 BoundingBoxExtents; union { @@ -167,7 +171,7 @@ struct SDKMESH_FRAME UINT ParentFrame; UINT ChildFrame; UINT SiblingFrame; - D3DXMATRIX Matrix; + DirectX::XMFLOAT4X4 Matrix; UINT AnimationDataIndex; //Used to index which set of keyframes transforms this frame }; @@ -183,28 +187,25 @@ struct SDKMESH_MATERIAL char NormalTexture[MAX_TEXTURE_NAME]; char SpecularTexture[MAX_TEXTURE_NAME]; - D3DXVECTOR4 Diffuse; - D3DXVECTOR4 Ambient; - D3DXVECTOR4 Specular; - D3DXVECTOR4 Emissive; - FLOAT Power; + DirectX::XMFLOAT4 Diffuse; + DirectX::XMFLOAT4 Ambient; + DirectX::XMFLOAT4 Specular; + DirectX::XMFLOAT4 Emissive; + float Power; union { UINT64 Force64_1; //Force the union to 64bits - IDirect3DTexture9* pDiffuseTexture9; ID3D11Texture2D* pDiffuseTexture11; }; union { UINT64 Force64_2; //Force the union to 64bits - IDirect3DTexture9* pNormalTexture9; ID3D11Texture2D* pNormalTexture11; }; union { UINT64 Force64_3; //Force the union to 64bits - IDirect3DTexture9* pSpecularTexture9; ID3D11Texture2D* pSpecularTexture11; }; @@ -240,9 +241,9 @@ struct SDKANIMATION_FILE_HEADER struct SDKANIMATION_DATA { - D3DXVECTOR3 Translation; - D3DXVECTOR4 Orientation; - D3DXVECTOR3 Scaling; + DirectX::XMFLOAT3 Translation; + DirectX::XMFLOAT4 Orientation; + DirectX::XMFLOAT3 Scaling; }; struct SDKANIMATION_FRAME_DATA @@ -255,34 +256,31 @@ struct SDKANIMATION_FRAME_DATA }; }; +#pragma pack(pop) + +static_assert( sizeof(D3DVERTEXELEMENT9) == 8, "Direct3D9 Decl structure size incorrect" ); +static_assert( sizeof(SDKMESH_HEADER)== 104, "SDK Mesh structure size incorrect" ); +static_assert( sizeof(SDKMESH_VERTEX_BUFFER_HEADER) == 288, "SDK Mesh structure size incorrect" ); +static_assert( sizeof(SDKMESH_INDEX_BUFFER_HEADER) == 32, "SDK Mesh structure size incorrect" ); +static_assert( sizeof(SDKMESH_MESH) == 224, "SDK Mesh structure size incorrect" ); +static_assert( sizeof(SDKMESH_SUBSET) == 144, "SDK Mesh structure size incorrect" ); +static_assert( sizeof(SDKMESH_FRAME) == 184, "SDK Mesh structure size incorrect" ); +static_assert( sizeof(SDKMESH_MATERIAL) == 1256, "SDK Mesh structure size incorrect" ); +static_assert( sizeof(SDKANIMATION_FILE_HEADER) == 40, "SDK Mesh structure size incorrect" ); +static_assert( sizeof(SDKANIMATION_DATA) == 40, "SDK Mesh structure size incorrect" ); +static_assert( sizeof(SDKANIMATION_FRAME_DATA) == 112, "SDK Mesh structure size incorrect" ); + #ifndef _CONVERTER_APP_ //-------------------------------------------------------------------------------------- // AsyncLoading callbacks //-------------------------------------------------------------------------------------- -typedef void ( CALLBACK*LPCREATETEXTUREFROMFILE9 )( IDirect3DDevice9* pDev, char* szFileName, - IDirect3DTexture9** ppTexture, void* pContext ); -typedef void ( CALLBACK*LPCREATEVERTEXBUFFER9 )( IDirect3DDevice9* pDev, IDirect3DVertexBuffer9** ppBuffer, - UINT iSizeBytes, DWORD Usage, DWORD FVF, D3DPOOL Pool, void* pData, - void* pContext ); -typedef void ( CALLBACK*LPCREATEINDEXBUFFER9 )( IDirect3DDevice9* pDev, IDirect3DIndexBuffer9** ppBuffer, - UINT iSizeBytes, DWORD Usage, D3DFORMAT ibFormat, D3DPOOL Pool, - void* pData, void* pContext ); -struct SDKMESH_CALLBACKS9 -{ - LPCREATETEXTUREFROMFILE9 pCreateTextureFromFile; - LPCREATEVERTEXBUFFER9 pCreateVertexBuffer; - LPCREATEINDEXBUFFER9 pCreateIndexBuffer; - void* pContext; -}; - - -typedef void ( CALLBACK*LPCREATETEXTUREFROMFILE11 )( ID3D11Device* pDev, char* szFileName, - ID3D11ShaderResourceView** ppRV, void* pContext ); -typedef void ( CALLBACK*LPCREATEVERTEXBUFFER11 )( ID3D11Device* pDev, ID3D11Buffer** ppBuffer, - D3D11_BUFFER_DESC BufferDesc, void* pData, void* pContext ); -typedef void ( CALLBACK*LPCREATEINDEXBUFFER11 )( ID3D11Device* pDev, ID3D11Buffer** ppBuffer, - D3D11_BUFFER_DESC BufferDesc, void* pData, void* pContext ); +typedef void ( CALLBACK*LPCREATETEXTUREFROMFILE11 )( _In_ ID3D11Device* pDev, _In_z_ char* szFileName, + _Outptr_ ID3D11ShaderResourceView** ppRV, _In_opt_ void* pContext ); +typedef void ( CALLBACK*LPCREATEVERTEXBUFFER11 )( _In_ ID3D11Device* pDev, _Outptr_ ID3D11Buffer** ppBuffer, + _In_ D3D11_BUFFER_DESC BufferDesc, _In_ void* pData, _In_opt_ void* pContext ); +typedef void ( CALLBACK*LPCREATEINDEXBUFFER11 )( _In_ ID3D11Device* pDev, _Outptr_ ID3D11Buffer** ppBuffer, + _In_ D3D11_BUFFER_DESC BufferDesc, _In_ void* pData, _In_opt_ void* pContext ); struct SDKMESH_CALLBACKS11 { LPCREATETEXTUREFROMFILE11 pCreateTextureFromFile; @@ -302,8 +300,7 @@ private: //BYTE* m_pBufferData; HANDLE m_hFile; HANDLE m_hFileMappingObject; - CGrowableArray <BYTE*> m_MappedPointers; - IDirect3DDevice9* m_pDev9; + std::vector<BYTE*> m_MappedPointers; ID3D11Device* m_pDev11; ID3D11DeviceContext* m_pDevContext11; @@ -331,259 +328,129 @@ protected: // Adjacency information (not part of the m_pStaticMeshData, so it must be created and destroyed separately ) SDKMESH_INDEX_BUFFER_HEADER* m_pAdjacencyIndexBufferArray; - //Animation (TODO: Add ability to load/track multiple animation sets) + //Animation SDKANIMATION_FILE_HEADER* m_pAnimationHeader; SDKANIMATION_FRAME_DATA* m_pAnimationFrameData; - D3DXMATRIX* m_pBindPoseFrameMatrices; - D3DXMATRIX* m_pTransformedFrameMatrices; - D3DXMATRIX* m_pWorldPoseFrameMatrices; + DirectX::XMFLOAT4X4* m_pBindPoseFrameMatrices; + DirectX::XMFLOAT4X4* m_pTransformedFrameMatrices; + DirectX::XMFLOAT4X4* m_pWorldPoseFrameMatrices; protected: - void LoadMaterials( ID3D11Device* pd3dDevice, SDKMESH_MATERIAL* pMaterials, - UINT NumMaterials, SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL ); - - void LoadMaterials( IDirect3DDevice9* pd3dDevice, SDKMESH_MATERIAL* pMaterials, - UINT NumMaterials, SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL ); - - HRESULT CreateVertexBuffer( ID3D11Device* pd3dDevice, - SDKMESH_VERTEX_BUFFER_HEADER* pHeader, void* pVertices, - SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL ); - HRESULT CreateVertexBuffer( IDirect3DDevice9* pd3dDevice, - SDKMESH_VERTEX_BUFFER_HEADER* pHeader, void* pVertices, - SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL ); - - HRESULT CreateIndexBuffer( ID3D11Device* pd3dDevice, SDKMESH_INDEX_BUFFER_HEADER* pHeader, - void* pIndices, SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL ); - HRESULT CreateIndexBuffer( IDirect3DDevice9* pd3dDevice, - SDKMESH_INDEX_BUFFER_HEADER* pHeader, void* pIndices, - SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL ); - - virtual HRESULT CreateFromFile( ID3D11Device* pDev11, - IDirect3DDevice9* pDev9, - LPCTSTR szFileName, - bool bCreateAdjacencyIndices, - SDKMESH_CALLBACKS11* pLoaderCallbacks11 = NULL, - SDKMESH_CALLBACKS9* pLoaderCallbacks9 = NULL ); - - virtual HRESULT CreateFromMemory( ID3D11Device* pDev11, - IDirect3DDevice9* pDev9, - BYTE* pData, - UINT DataBytes, - bool bCreateAdjacencyIndices, - bool bCopyStatic, - SDKMESH_CALLBACKS11* pLoaderCallbacks11 = NULL, - SDKMESH_CALLBACKS9* pLoaderCallbacks9 = NULL ); + void LoadMaterials( _In_ ID3D11Device* pd3dDevice, _In_reads_(NumMaterials) SDKMESH_MATERIAL* pMaterials, + _In_ UINT NumMaterials, _In_opt_ SDKMESH_CALLBACKS11* pLoaderCallbacks = nullptr ); + + HRESULT CreateVertexBuffer( _In_ ID3D11Device* pd3dDevice, + _In_ SDKMESH_VERTEX_BUFFER_HEADER* pHeader, _In_reads_(pHeader->SizeBytes) void* pVertices, + _In_opt_ SDKMESH_CALLBACKS11* pLoaderCallbacks = nullptr ); + + HRESULT CreateIndexBuffer( _In_ ID3D11Device* pd3dDevice, + _In_ SDKMESH_INDEX_BUFFER_HEADER* pHeader, _In_reads_(pHeader->SizeBytes) void* pIndices, + _In_opt_ SDKMESH_CALLBACKS11* pLoaderCallbacks = nullptr ); + + virtual HRESULT CreateFromFile( _In_opt_ ID3D11Device* pDev11, + _In_z_ LPCWSTR szFileName, + _In_opt_ SDKMESH_CALLBACKS11* pLoaderCallbacks11 = nullptr ); + + virtual HRESULT CreateFromMemory( _In_opt_ ID3D11Device* pDev11, + _In_reads_(DataBytes) BYTE* pData, + _In_ size_t DataBytes, + _In_ bool bCopyStatic, + _In_opt_ SDKMESH_CALLBACKS11* pLoaderCallbacks11 = nullptr ); //frame manipulation - void TransformBindPoseFrame( UINT iFrame, D3DXMATRIX* pParentWorld ); - void TransformFrame( UINT iFrame, D3DXMATRIX* pParentWorld, double fTime ); - void TransformFrameAbsolute( UINT iFrame, double fTime ); + void TransformBindPoseFrame( _In_ UINT iFrame, _In_ DirectX::CXMMATRIX parentWorld ); + void TransformFrame( _In_ UINT iFrame, _In_ DirectX::CXMMATRIX parentWorld, _In_ double fTime ); + void TransformFrameAbsolute( _In_ UINT iFrame, _In_ double fTime ); //Direct3D 11 rendering helpers - void RenderMesh( UINT iMesh, - bool bAdjacent, - ID3D11DeviceContext* pd3dDeviceContext, - UINT iDiffuseSlot, - UINT iNormalSlot, - UINT iSpecularSlot ); - void RenderFrame( UINT iFrame, - bool bAdjacent, - ID3D11DeviceContext* pd3dDeviceContext, - UINT iDiffuseSlot, - UINT iNormalSlot, - UINT iSpecularSlot ); - - - //Direct3D 9 rendering helpers - void RenderMesh( UINT iMesh, - LPDIRECT3DDEVICE9 pd3dDevice, - LPD3DXEFFECT pEffect, - D3DXHANDLE hTechnique, - D3DXHANDLE htxDiffuse, - D3DXHANDLE htxNormal, - D3DXHANDLE htxSpecular ); - void RenderFrame( UINT iFrame, - LPDIRECT3DDEVICE9 pd3dDevice, - LPD3DXEFFECT pEffect, - D3DXHANDLE hTechnique, - D3DXHANDLE htxDiffuse, - D3DXHANDLE htxNormal, - D3DXHANDLE htxSpecular ); + void RenderMesh( _In_ UINT iMesh, + _In_ bool bAdjacent, + _In_ ID3D11DeviceContext* pd3dDeviceContext, + _In_ UINT iDiffuseSlot, + _In_ UINT iNormalSlot, + _In_ UINT iSpecularSlot ); + void RenderFrame( _In_ UINT iFrame, + _In_ bool bAdjacent, + _In_ ID3D11DeviceContext* pd3dDeviceContext, + _In_ UINT iDiffuseSlot, + _In_ UINT iNormalSlot, + _In_ UINT iSpecularSlot ); public: - CDXUTSDKMesh(); - virtual ~CDXUTSDKMesh(); - - virtual HRESULT Create( ID3D11Device* pDev11, LPCTSTR szFileName, bool bCreateAdjacencyIndices= - false, SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL ); - virtual HRESULT Create( IDirect3DDevice9* pDev9, LPCTSTR szFileName, bool bCreateAdjacencyIndices= - false, SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL ); - virtual HRESULT Create( ID3D11Device* pDev11, BYTE* pData, UINT DataBytes, - bool bCreateAdjacencyIndices=false, bool bCopyStatic=false, - SDKMESH_CALLBACKS11* pLoaderCallbacks=NULL ); - virtual HRESULT Create( IDirect3DDevice9* pDev9, BYTE* pData, UINT DataBytes, - bool bCreateAdjacencyIndices=false, bool bCopyStatic=false, - SDKMESH_CALLBACKS9* pLoaderCallbacks=NULL ); - virtual HRESULT LoadAnimation( WCHAR* szFileName ); - virtual void Destroy(); + CDXUTSDKMesh(); + virtual ~CDXUTSDKMesh(); - //Frame manipulation - void TransformBindPose( D3DXMATRIX* pWorld ); - void TransformMesh( D3DXMATRIX* pWorld, double fTime ); + virtual HRESULT Create( _In_ ID3D11Device* pDev11, _In_z_ LPCWSTR szFileName, _In_opt_ SDKMESH_CALLBACKS11* pLoaderCallbacks = nullptr ); + virtual HRESULT Create( _In_ ID3D11Device* pDev11, BYTE* pData, size_t DataBytes, _In_ bool bCopyStatic=false, + _In_opt_ SDKMESH_CALLBACKS11* pLoaderCallbacks = nullptr ); + virtual HRESULT LoadAnimation( _In_z_ const WCHAR* szFileName ); + virtual void Destroy(); + //Frame manipulation + void TransformBindPose( _In_ DirectX::CXMMATRIX world ) { TransformBindPoseFrame( 0, world ); }; + void TransformMesh( _In_ DirectX::CXMMATRIX world, _In_ double fTime ); //Direct3D 11 Rendering - virtual void Render( ID3D11DeviceContext* pd3dDeviceContext, - UINT iDiffuseSlot = INVALID_SAMPLER_SLOT, - UINT iNormalSlot = INVALID_SAMPLER_SLOT, - UINT iSpecularSlot = INVALID_SAMPLER_SLOT ); - virtual void RenderAdjacent( ID3D11DeviceContext* pd3dDeviceContext, - UINT iDiffuseSlot = INVALID_SAMPLER_SLOT, - UINT iNormalSlot = INVALID_SAMPLER_SLOT, - UINT iSpecularSlot = INVALID_SAMPLER_SLOT ); - - //Direct3D 9 Rendering - virtual void Render( LPDIRECT3DDEVICE9 pd3dDevice, - LPD3DXEFFECT pEffect, - D3DXHANDLE hTechnique, - D3DXHANDLE htxDiffuse = 0, - D3DXHANDLE htxNormal = 0, - D3DXHANDLE htxSpecular = 0 ); + virtual void Render( _In_ ID3D11DeviceContext* pd3dDeviceContext, + _In_ UINT iDiffuseSlot = INVALID_SAMPLER_SLOT, + _In_ UINT iNormalSlot = INVALID_SAMPLER_SLOT, + _In_ UINT iSpecularSlot = INVALID_SAMPLER_SLOT ); + virtual void RenderAdjacent( _In_ ID3D11DeviceContext* pd3dDeviceContext, + _In_ UINT iDiffuseSlot = INVALID_SAMPLER_SLOT, + _In_ UINT iNormalSlot = INVALID_SAMPLER_SLOT, + _In_ UINT iSpecularSlot = INVALID_SAMPLER_SLOT ); //Helpers (D3D11 specific) - static D3D11_PRIMITIVE_TOPOLOGY GetPrimitiveType11( SDKMESH_PRIMITIVE_TYPE PrimType ); - DXGI_FORMAT GetIBFormat11( UINT iMesh ); - ID3D11Buffer* GetVB11( UINT iMesh, UINT iVB ); - ID3D11Buffer* GetIB11( UINT iMesh ); - SDKMESH_INDEX_TYPE GetIndexType( UINT iMesh ); + static D3D11_PRIMITIVE_TOPOLOGY GetPrimitiveType11( _In_ SDKMESH_PRIMITIVE_TYPE PrimType ); + DXGI_FORMAT GetIBFormat11( _In_ UINT iMesh ) const; + ID3D11Buffer* GetVB11( _In_ UINT iMesh, _In_ UINT iVB ) const; + ID3D11Buffer* GetIB11( _In_ UINT iMesh ) const; + SDKMESH_INDEX_TYPE GetIndexType( _In_ UINT iMesh ) const; - ID3D11Buffer* GetAdjIB11( UINT iMesh ); - - //Helpers (D3D9 specific) - static D3DPRIMITIVETYPE GetPrimitiveType9( SDKMESH_PRIMITIVE_TYPE PrimType ); - D3DFORMAT GetIBFormat9( UINT iMesh ); - IDirect3DVertexBuffer9* GetVB9( UINT iMesh, UINT iVB ); - IDirect3DIndexBuffer9* GetIB9( UINT iMesh ); + ID3D11Buffer* GetAdjIB11( _In_ UINT iMesh ) const; //Helpers (general) - char* GetMeshPathA(); - WCHAR* GetMeshPathW(); - UINT GetNumMeshes(); - UINT GetNumMaterials(); - UINT GetNumVBs(); - UINT GetNumIBs(); - - ID3D11Buffer* GetVB11At( UINT iVB ); - ID3D11Buffer* GetIB11At( UINT iIB ); - - IDirect3DVertexBuffer9* GetVB9At( UINT iVB ); - IDirect3DIndexBuffer9* GetIB9At( UINT iIB ); - - BYTE* GetRawVerticesAt( UINT iVB ); - BYTE* GetRawIndicesAt( UINT iIB ); - SDKMESH_MATERIAL* GetMaterial( UINT iMaterial ); - SDKMESH_MESH* GetMesh( UINT iMesh ); - UINT GetNumSubsets( UINT iMesh ); - SDKMESH_SUBSET* GetSubset( UINT iMesh, UINT iSubset ); - UINT GetVertexStride( UINT iMesh, UINT iVB ); - UINT GetNumFrames(); - SDKMESH_FRAME* GetFrame( UINT iFrame ); - SDKMESH_FRAME* FindFrame( char* pszName ); - UINT64 GetNumVertices( UINT iMesh, UINT iVB ); - UINT64 GetNumIndices( UINT iMesh ); - D3DXVECTOR3 GetMeshBBoxCenter( UINT iMesh ); - D3DXVECTOR3 GetMeshBBoxExtents( UINT iMesh ); - UINT GetOutstandingResources(); - UINT GetOutstandingBufferResources(); - bool CheckLoadDone(); - bool IsLoaded(); - bool IsLoading(); - void SetLoading( bool bLoading ); - BOOL HadLoadingError(); + const char* GetMeshPathA() const; + const WCHAR* GetMeshPathW() const; + UINT GetNumMeshes() const; + UINT GetNumMaterials() const; + UINT GetNumVBs() const; + UINT GetNumIBs() const; + + ID3D11Buffer* GetVB11At( _In_ UINT iVB ) const; + ID3D11Buffer* GetIB11At( _In_ UINT iIB ) const; + + BYTE* GetRawVerticesAt( _In_ UINT iVB ) const; + BYTE* GetRawIndicesAt( _In_ UINT iIB ) const; + + SDKMESH_MATERIAL* GetMaterial( _In_ UINT iMaterial ) const; + SDKMESH_MESH* GetMesh( _In_ UINT iMesh ) const; + UINT GetNumSubsets( _In_ UINT iMesh ) const; + SDKMESH_SUBSET* GetSubset( _In_ UINT iMesh, _In_ UINT iSubset ) const; + UINT GetVertexStride( _In_ UINT iMesh, _In_ UINT iVB ) const; + UINT GetNumFrames() const; + SDKMESH_FRAME* GetFrame( _In_ UINT iFrame ) const; + SDKMESH_FRAME* FindFrame( _In_z_ const char* pszName ) const; + UINT64 GetNumVertices( _In_ UINT iMesh, _In_ UINT iVB ) const; + UINT64 GetNumIndices( _In_ UINT iMesh ) const; + DirectX::XMVECTOR GetMeshBBoxCenter( _In_ UINT iMesh ) const; + DirectX::XMVECTOR GetMeshBBoxExtents( _In_ UINT iMesh ) const; + UINT GetOutstandingResources() const; + UINT GetOutstandingBufferResources() const; + bool CheckLoadDone(); + bool IsLoaded() const; + bool IsLoading() const; + void SetLoading( _In_ bool bLoading ); + BOOL HadLoadingError() const; //Animation - UINT GetNumInfluences( UINT iMesh ); - const D3DXMATRIX* GetMeshInfluenceMatrix( UINT iMesh, UINT iInfluence ); - UINT GetAnimationKeyFromTime( double fTime ); - const D3DXMATRIX* GetWorldMatrix( UINT iFrameIndex ); - const D3DXMATRIX* GetInfluenceMatrix( UINT iFrameIndex ); - bool GetAnimationProperties( UINT* pNumKeys, FLOAT* pFrameTime ); + UINT GetNumInfluences( _In_ UINT iMesh ) const; + DirectX::XMMATRIX GetMeshInfluenceMatrix( _In_ UINT iMesh, _In_ UINT iInfluence ) const; + UINT GetAnimationKeyFromTime( _In_ double fTime ) const; + DirectX::XMMATRIX GetWorldMatrix( _In_ UINT iFrameIndex ) const; + DirectX::XMMATRIX GetInfluenceMatrix( _In_ UINT iFrameIndex ) const; + bool GetAnimationProperties( _Out_ UINT* pNumKeys, _Out_ float* pFrameTime ) const; }; -//----------------------------------------------------------------------------- -// Name: class CDXUTXFileMesh -// Desc: Class for loading and rendering file-based meshes -//----------------------------------------------------------------------------- -class CDXUTXFileMesh -{ -public: - WCHAR m_strName[512]; - LPD3DXMESH m_pMesh; // Managed mesh - - // Cache of data in m_pMesh for easy access - IDirect3DVertexBuffer9* m_pVB; - IDirect3DIndexBuffer9* m_pIB; - IDirect3DVertexDeclaration9* m_pDecl; - DWORD m_dwNumVertices; - DWORD m_dwNumFaces; - DWORD m_dwBytesPerVertex; - - DWORD m_dwNumMaterials; // Materials for the mesh - D3DMATERIAL9* m_pMaterials; - CHAR (*m_strMaterials )[MAX_PATH]; - IDirect3DBaseTexture9** m_pTextures; - bool m_bUseMaterials; - -public: - // Rendering - HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, - bool bDrawOpaqueSubsets = true, - bool bDrawAlphaSubsets = true ); - HRESULT Render( ID3DXEffect* pEffect, - D3DXHANDLE hTexture = NULL, - D3DXHANDLE hDiffuse = NULL, - D3DXHANDLE hAmbient = NULL, - D3DXHANDLE hSpecular = NULL, - D3DXHANDLE hEmissive = NULL, - D3DXHANDLE hPower = NULL, - bool bDrawOpaqueSubsets = true, - bool bDrawAlphaSubsets = true ); - - // Mesh access - LPD3DXMESH GetMesh() - { - return m_pMesh; - } - - // Rendering options - void UseMeshMaterials( bool bFlag ) - { - m_bUseMaterials = bFlag; - } - HRESULT SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF ); - HRESULT SetVertexDecl( LPDIRECT3DDEVICE9 pd3dDevice, const D3DVERTEXELEMENT9* pDecl, - bool bAutoComputeNormals = true, bool bAutoComputeTangents = true, - bool bSplitVertexForOptimalTangents = false ); - - // Initializing - HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice ); - HRESULT InvalidateDeviceObjects(); - - // Creation/destruction - HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strFilename ); - HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPD3DXFILEDATA pFileData ); - HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, ID3DXMesh* pInMesh, D3DXMATERIAL* pd3dxMaterials, - DWORD dwMaterials ); - HRESULT CreateMaterials( LPCWSTR strPath, IDirect3DDevice9* pd3dDevice, D3DXMATERIAL* d3dxMtrls, - DWORD dwNumMaterials ); - HRESULT Destroy(); - - CDXUTXFileMesh( LPCWSTR strName = L"CDXUTXMeshFile_Mesh" ); - virtual ~CDXUTXFileMesh(); -}; - - -#endif - #endif |