home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 8090 / ModelEdit.7z / vertexbuffercontroller.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-03-08  |  3.0 KB  |  57 lines

  1. // VertexBufferController.h
  2.  
  3. #ifndef __VERTEXBUFFERCONTROLLER_H__
  4. #define __VERTEXBUFFERCONTROLLER_H__
  5.  
  6. #include "d3d_vertstructs.h"
  7.  
  8. #define VERTEXBUFFER_STREAMCOUNT    4
  9.  
  10. // Vertex Buffer Container Class
  11. //    Hold your steam data
  12. class VertexBufferController {
  13. public:
  14.     VertexBufferController()                                                    { Reset(); }
  15.     ~VertexBufferController()                                                    { FreeAll(); }
  16.  
  17.     enum VB_TYPE                                                                { eVERTSTREAM0, eVERTSTREAM1, eVERTSTREAM2, eVERTSTREAM3, eINDEX };
  18.     enum VERTEX_BLEND_TYPE                                                        { eNO_WORLD_BLENDS, eNONINDEXED_B1, eNONINDEXED_B2, eNONINDEXED_B3, eINDEXED_B1, eINDEXED_B2, eINDEXED_B3 };
  19.  
  20.     bool                            CreateStream(uint32 iStreamNum, int32 nVertexCount, uint32 iVertDataType, VERTEX_BLEND_TYPE VertBlendType, bool bDynamic, bool bWriteOnly);
  21.     bool                            CreateIndexBuffer(int32 iIndexCount);
  22.     void                            Reset();                                    // Resets back to initial conditions (doesn't try to free anything)...
  23.     void                            FreeAll();                                    // Frees all the member vars and resets afterwards...
  24.  
  25.     void                            SetStreamSources();                            // Call this before a render call - sets the streams and stuff like that (just need to call it once per group of render calls)...
  26.     void                            Render(uint32 MinIndex,uint32 MinVert,uint32 VertCount,uint32 TriCount);    // Transform, light, and render directly using the unprocessed buffer...
  27.  
  28.     bool                            Lock(VB_TYPE Type,bool bDiscardContents);
  29.     bool                            UnLock(VB_TYPE Type);
  30.     void*                            getVertexData(uint32 iStreamNum)            { return m_pVert_Data[iStreamNum]; }
  31.     uint16*                            getIndexData()                                { return m_pIndex_Data; }
  32.     uint32                            getVertexCount(uint32 iStreamNum)            { return m_VertexCount[iStreamNum]; }
  33.     uint32                            getUVSetCount(uint32 iStreamNum)            { return m_UVSets[iStreamNum]; }
  34.     uint32                            getVertexSize(uint32 iStreamNum)            { return m_VertexSize[iStreamNum]; }
  35.     uint32                            getVertexSize_UVData(uint32 iStreamNum)        { switch (m_UVSets[iStreamNum]) { case 1 : return sizeof(VSTREAM_UV1); case 2 : return sizeof(VSTREAM_UV2); case 3 : return sizeof(VSTREAM_UV3); case 4 : return sizeof(VSTREAM_UV4); } return 0; }
  36.     uint32                            getXYZSize()                                { return sizeof(float)*3; }
  37.     uint32                            getXYZBlendIndexSize(uint32 iStreamNum)        { return m_VertexSize[iStreamNum] - getVertexSize_UVData(iStreamNum) - sizeof(float)*3; }
  38.     uint32                            getVertexFormat(uint32 iStreamNum)            { return m_VertexFVFFlags[iStreamNum]; } 
  39.  
  40. private:
  41.     LPDIRECT3DVERTEXBUFFER8            m_pVB_VertStream[VERTEXBUFFER_STREAMCOUNT];    // Handles to the vertex buffers...
  42.     LPDIRECT3DINDEXBUFFER8            m_pVB_Index;
  43.  
  44.     void*                            m_pVert_Data[VERTEXBUFFER_STREAMCOUNT];        // Data (for when you lock stuff)...
  45.     uint16*                            m_pIndex_Data;
  46.     
  47.     VERTEX_BLEND_TYPE                m_VertexBlendType[VERTEXBUFFER_STREAMCOUNT];
  48.     uint32                            m_VertexFVFFlags[VERTEXBUFFER_STREAMCOUNT];
  49.     uint32                            m_VertexSize[VERTEXBUFFER_STREAMCOUNT];
  50.     uint32                            m_VertexCount[VERTEXBUFFER_STREAMCOUNT];
  51.     uint32                            m_IndexCount;
  52.     uint32                            m_UVSets[VERTEXBUFFER_STREAMCOUNT];
  53.     bool                            m_bDynamicVB[VERTEXBUFFER_STREAMCOUNT];        // Is the VB creates as Dynamic?
  54. };
  55.  
  56. #endif
  57.