www.pudn.com > d3d_grass.rar > d3dfile.h


//----------------------------------------------------------------------------- 
// File: D3DFile.h 
// 
// Desc: Support code for loading DirectX .X files. 
// 
// Copyright (c) 1997-2001 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 
    D3DMATERIAL8*       m_pMaterials; 
    LPDIRECT3DTEXTURE8* m_pTextures; 
    BOOL                m_bUseMaterials; 
 
public: 
    // Rendering 
    HRESULT Render( LPDIRECT3DDEVICE8 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( LPDIRECT3DDEVICE8 pd3dDevice, DWORD dwFVF ); 
 
    // Initializing 
    HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE8 pd3dDevice ); 
    HRESULT InvalidateDeviceObjects(); 
 
    // Creation/destruction 
    HRESULT Create( LPDIRECT3DDEVICE8 pd3dDevice, TCHAR* strFilename ); 
    HRESULT Create( LPDIRECT3DDEVICE8 pd3dDevice, LPDIRECTXFILEDATA pFileData ); 
    HRESULT Destroy(); 
 
    CD3DMesh( TCHAR* 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; 
    TCHAR      m_strMeshName[512]; 
 
    CD3DFrame* m_pNext; 
    CD3DFrame* m_pChild; 
 
public: 
    // Matrix access 
    VOID        SetMatrix( D3DXMATRIX* pmat ) { m_mat = *pmat; } 
    D3DXMATRIX* GetMatrix()                   { return &m_mat; } 
 
    CD3DMesh*   FindMesh( TCHAR* strMeshName ); 
    CD3DFrame*  FindFrame( TCHAR* strFrameName ); 
    BOOL        EnumMeshes( BOOL (*EnumMeshCB)(CD3DMesh*,VOID*),  
                            VOID* pContext ); 
 
    HRESULT Destroy(); 
    HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE8 pd3dDevice ); 
    HRESULT InvalidateDeviceObjects(); 
    HRESULT Render( LPDIRECT3DDEVICE8 pd3dDevice,  
                    BOOL bDrawOpaqueSubsets = TRUE, 
                    BOOL bDrawAlphaSubsets = TRUE, 
                    D3DXMATRIX* pmatWorldMartix = NULL); 
     
    CD3DFrame( TCHAR* strName = _T("CD3DFile_Frame") ); 
    virtual ~CD3DFrame(); 
}; 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: class CD3DFile 
// Desc: Class for loading and rendering file-based meshes 
//----------------------------------------------------------------------------- 
class CD3DFile : public CD3DFrame 
{ 
    HRESULT LoadMesh( LPDIRECT3DDEVICE8 pd3dDevice, LPDIRECTXFILEDATA pFileData,  
                      CD3DFrame* pParentFrame ); 
    HRESULT LoadFrame( LPDIRECT3DDEVICE8 pd3dDevice, LPDIRECTXFILEDATA pFileData,  
                       CD3DFrame* pParentFrame ); 
public: 
    HRESULT Create( LPDIRECT3DDEVICE8 pd3dDevice, TCHAR* strFilename ); 
    HRESULT CreateFromResource( LPDIRECT3DDEVICE8 pd3dDevice, TCHAR* strResource, TCHAR* strType ); 
    // For pure devices, specify the world transform. If the world transform is not 
    // specified on pure devices, this function will fail. 
    HRESULT Render( LPDIRECT3DDEVICE8 pd3dDevice, D3DXMATRIX* pmatWorldMatrix = NULL ); 
 
    CD3DFile() : CD3DFrame( _T("CD3DFile_Root") ) {} 
}; 
 
 
 
#endif