www.pudn.com > Samples-latest.zip > d3dfile.h
//----------------------------------------------------------------------------- // File: D3DFile.h // // Desc: Support code for loading DirectX .X files. // // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #ifndef D3DFILE_H #define D3DFILE_H #include#include #include //----------------------------------------------------------------------------- // Name: class CD3DMesh // Desc: Class for loading and rendering file-based meshes //----------------------------------------------------------------------------- class CD3DMesh { public: TCHAR m_strName[512]; LPD3DXMESH m_pSysMemMesh; // SysMem mesh, lives through resize LPD3DXMESH m_pLocalMesh; // Local mesh, rebuilt on resize DWORD m_dwNumMaterials; // Materials for the mesh D3DMATERIAL9* m_pMaterials; LPDIRECT3DTEXTURE9* m_pTextures; bool m_bUseMaterials; public: // Rendering HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, bool bDrawOpaqueSubsets = true, bool bDrawAlphaSubsets = true ); // Mesh access LPD3DXMESH GetSysMemMesh() { return m_pSysMemMesh; } LPD3DXMESH GetLocalMesh() { return m_pLocalMesh; } // Rendering options void UseMeshMaterials( bool bFlag ) { m_bUseMaterials = bFlag; } HRESULT SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF ); HRESULT SetVertexDecl( LPDIRECT3DDEVICE9 pd3dDevice, D3DVERTEXELEMENT9 *pDecl ); // Initializing HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice ); HRESULT InvalidateDeviceObjects(); // Creation/destruction HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCTSTR strFilename ); HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPDIRECTXFILEDATA pFileData ); HRESULT Destroy(); CD3DMesh( LPCTSTR strName = _T("CD3DFile_Mesh") ); virtual ~CD3DMesh(); }; //----------------------------------------------------------------------------- // Name: class CD3DFrame // Desc: Class for loading and rendering file-based meshes //----------------------------------------------------------------------------- class CD3DFrame { public: TCHAR m_strName[512]; D3DXMATRIX m_mat; CD3DMesh* m_pMesh; CD3DFrame* m_pNext; CD3DFrame* m_pChild; public: // Matrix access void SetMatrix( D3DXMATRIX* pmat ) { m_mat = *pmat; } D3DXMATRIX* GetMatrix() { return &m_mat; } CD3DMesh* FindMesh( LPCTSTR strMeshName ); CD3DFrame* FindFrame( LPCTSTR strFrameName ); bool EnumMeshes( bool (*EnumMeshCB)(CD3DMesh*,void*), void* pContext ); HRESULT Destroy(); HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice ); HRESULT InvalidateDeviceObjects(); HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, bool bDrawOpaqueSubsets = true, bool bDrawAlphaSubsets = true, D3DXMATRIX* pmatWorldMartix = NULL); CD3DFrame( LPCTSTR strName = _T("CD3DFile_Frame") ); virtual ~CD3DFrame(); }; //----------------------------------------------------------------------------- // Name: class CD3DFile // Desc: Class for loading and rendering file-based meshes //----------------------------------------------------------------------------- class CD3DFile : public CD3DFrame { HRESULT LoadMesh( LPDIRECT3DDEVICE9 pd3dDevice, LPDIRECTXFILEDATA pFileData, CD3DFrame* pParentFrame ); HRESULT LoadFrame( LPDIRECT3DDEVICE9 pd3dDevice, LPDIRECTXFILEDATA pFileData, CD3DFrame* pParentFrame ); public: HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCTSTR strFilename ); HRESULT CreateFromResource( LPDIRECT3DDEVICE9 pd3dDevice, LPCTSTR strResource, LPCTSTR strType ); // For pure devices, specify the world transform. If the world transform is not // specified on pure devices, this function will fail. HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, D3DXMATRIX* pmatWorldMatrix = NULL ); CD3DFile() : CD3DFrame( _T("CD3DFile_Root") ) {} }; #endif