// ============================================================================
 // Filename: MESH.cpp
 // Description: Mesh Tutorial, Mesh class header. From the 32Bits
 //              DirectX Techniques Series 1 Tutorial 4.
 // Created by wizard version 0.1 Beta.
 //
 // Found a bug in this code framework? Need some help? Come to www.32bits.co.uk
 // for support, feedback and the best DirectX dev community on the net!
 // ============================================================================

 #pragma once

 #ifndef _CD3DMESH_H
 #define _CD3DMESH_H

 #include "CD3DObject.h"

 // Mesh class inherits from CD3DObject, so it can be managed. For more
 // information on the CD3DObject class and why we inherit from it, read
 // the 32Bits DirectX Basics Series 2 Tutorial 5 "CD3DObject" tutorial.
 //
 // This class will easily stand alone from CD3DObject, just remove the
 // inheritance, RestoreVolatile & ReleaseVolatile functions, and the
 // 2 calls to base class functions in the CD3DMesh constructor.

 class CD3DMesh : public CD3DObject
 {
 public:

     CD3DMesh();
     virtual ~CD3DMesh();

     HRESULT Initialise(char* szMeshFile, LPDIRECT3DDEVICE9& pDevice);
     HRESULT Shutdown();

     // Render is a pure virtual in the base class.
     HRESULT Render(LPDIRECT3DDEVICE9& pDevice);

     // These methods are not required but are defined as pure virtual, so must be
     // included.
     HRESULT RestoreVolatile(){return E_FAIL;}
     HRESULT ReleaseVolatile(){return E_FAIL;}
     HRESULT Render(LPDIRECT3DDEVICE9& pDevice, LPDIRECT3DSURFACE9& pRenderSurface){return E_FAIL;}


 private:

     LPD3DXMESH              m_pMesh;                    // The actual mesh object

     LPD3DXBUFFER            m_pMaterialsBuffer;         // Receives the materials when the X file is loaded
     D3DMATERIAL9*           m_pMaterials;               // Array of materials extracted from m_pMaterialsBuffer
     LPDIRECT3DTEXTURE9*     m_pTextures;                // Array of textures extracted from m_pMaterialsBuffer

     DWORD                   m_dwNumMaterials;           // The number of materials in this mesh

 };

 #endif // _CD3DMESH_H