home *** CD-ROM | disk | FTP | other *** search
/ Programming a Multiplayer FPS in DirectX / Programming a Multiplayer FPS in DirectX (Companion CD).iso / DirectX / dxsdk_oct2004.exe / dxsdk.exe / Samples / C++ / Common / DXUTMesh.h < prev    next >
Encoding:
C/C++ Source or Header  |  2004-09-28  |  4.9 KB  |  139 lines

  1. //-----------------------------------------------------------------------------
  2. // File: DXUTMesh.h
  3. //
  4. // Desc: Support code for loading DirectX .X files.
  5. //
  6. // Copyright (c) Microsoft Corporation. All rights reserved.
  7. //-----------------------------------------------------------------------------
  8. #pragma once
  9. #ifndef DXUTMESH_H
  10. #define DXUTMESH_H
  11.  
  12.  
  13.  
  14.  
  15.  
  16. //-----------------------------------------------------------------------------
  17. // Name: class CDXUTMesh
  18. // Desc: Class for loading and rendering file-based meshes
  19. //-----------------------------------------------------------------------------
  20. class CDXUTMesh
  21. {
  22. public:
  23.     WCHAR                   m_strName[512];
  24.  
  25.     LPD3DXMESH              m_pSysMemMesh;    // SysMem mesh, lives through resize
  26.     LPD3DXMESH              m_pLocalMesh;     // Local mesh, rebuilt on resize
  27.     
  28.     DWORD                   m_dwNumMaterials; // Materials for the mesh
  29.     D3DMATERIAL9*           m_pMaterials;
  30.     IDirect3DBaseTexture9** m_pTextures;
  31.     bool                    m_bUseMaterials;
  32.  
  33. public:
  34.     // Rendering
  35.     HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, 
  36.                     bool bDrawOpaqueSubsets = true,
  37.                     bool bDrawAlphaSubsets = true );
  38.     HRESULT Render( ID3DXEffect *pEffect,
  39.                     D3DXHANDLE hTexture = NULL,
  40.                     D3DXHANDLE hDiffuse = NULL,
  41.                     D3DXHANDLE hAmbient = NULL,
  42.                     D3DXHANDLE hSpecular = NULL,
  43.                     D3DXHANDLE hEmissive = NULL,
  44.                     D3DXHANDLE hPower = NULL,
  45.                     bool bDrawOpaqueSubsets = true,
  46.                     bool bDrawAlphaSubsets = true );
  47.  
  48.     // Mesh access
  49.     LPD3DXMESH GetSysMemMesh() { return m_pSysMemMesh; }
  50.     LPD3DXMESH GetLocalMesh()  { return m_pLocalMesh; }
  51.  
  52.     // Rendering options
  53.     void    UseMeshMaterials( bool bFlag ) { m_bUseMaterials = bFlag; }
  54.     HRESULT SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF );
  55.     HRESULT SetVertexDecl( LPDIRECT3DDEVICE9 pd3dDevice, const D3DVERTEXELEMENT9 *pDecl );
  56.  
  57.     // Initializing
  58.     HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice );
  59.     HRESULT InvalidateDeviceObjects();
  60.  
  61.     // Creation/destruction
  62.     HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strFilename );
  63.     HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPD3DXFILEDATA pFileData );
  64.     HRESULT CreateMaterials( LPCWSTR strPath, IDirect3DDevice9 *pd3dDevice, ID3DXBuffer *pAdjacencyBuffer, ID3DXBuffer *pMtrlBuffer );
  65.     HRESULT Destroy();
  66.  
  67.     CDXUTMesh( LPCWSTR strName = L"CDXUTMeshFile_Mesh" );
  68.     virtual ~CDXUTMesh();
  69. };
  70.  
  71.  
  72.  
  73.  
  74. //-----------------------------------------------------------------------------
  75. // Name: class CDXUTMeshFrame
  76. // Desc: Class for loading and rendering file-based meshes
  77. //-----------------------------------------------------------------------------
  78. class CDXUTMeshFrame
  79. {
  80. public:
  81.     WCHAR      m_strName[512];
  82.     D3DXMATRIX m_mat;
  83.     CDXUTMesh*  m_pMesh;
  84.  
  85.     CDXUTMeshFrame* m_pNext;
  86.     CDXUTMeshFrame* m_pChild;
  87.  
  88. public:
  89.     // Matrix access
  90.     void        SetMatrix( D3DXMATRIX* pmat ) { m_mat = *pmat; }
  91.     D3DXMATRIX* GetMatrix()                   { return &m_mat; }
  92.  
  93.     CDXUTMesh*   FindMesh( LPCWSTR strMeshName );
  94.     CDXUTMeshFrame*  FindFrame( LPCWSTR strFrameName );
  95.     bool        EnumMeshes( bool (*EnumMeshCB)(CDXUTMesh*,void*), 
  96.                             void* pContext );
  97.  
  98.     HRESULT Destroy();
  99.     HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice );
  100.     HRESULT InvalidateDeviceObjects();
  101.     HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, 
  102.                     bool bDrawOpaqueSubsets = true,
  103.                     bool bDrawAlphaSubsets = true,
  104.                     D3DXMATRIX* pmatWorldMartix = NULL);
  105.     
  106.     CDXUTMeshFrame( LPCWSTR strName = L"CDXUTMeshFile_Frame" );
  107.     virtual ~CDXUTMeshFrame();
  108. };
  109.  
  110.  
  111.  
  112.  
  113. //-----------------------------------------------------------------------------
  114. // Name: class CDXUTMeshFile
  115. // Desc: Class for loading and rendering file-based meshes
  116. //-----------------------------------------------------------------------------
  117. class CDXUTMeshFile : public CDXUTMeshFrame
  118. {
  119.     HRESULT LoadMesh( LPDIRECT3DDEVICE9 pd3dDevice, LPD3DXFILEDATA pFileData, 
  120.                       CDXUTMeshFrame* pParentFrame );
  121.     HRESULT LoadFrame( LPDIRECT3DDEVICE9 pd3dDevice, LPD3DXFILEDATA pFileData, 
  122.                        CDXUTMeshFrame* pParentFrame );
  123. public:
  124.     HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strFilename );
  125.     HRESULT CreateFromResource( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strResource, LPCWSTR strType );
  126.     // For pure devices, specify the world transform. If the world transform is not
  127.     // specified on pure devices, this function will fail.
  128.     HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, D3DXMATRIX* pmatWorldMatrix = NULL );
  129.  
  130.     CDXUTMeshFile() : CDXUTMeshFrame( L"CDXUTMeshFile_Root" ) {}
  131. };
  132.  
  133.  
  134.  
  135. #endif
  136.  
  137.  
  138.  
  139.