6 #ifndef _INC_cDXBuffer_H
7 #define _INC_cDXBuffer_H
19 template <
class _TYPE_VERT = cVector3f>
27 _TYPE_VERT* m_pVertex;
28 IDirect3DVertexBuffer9* m_pIVertexBuffer;
31 cDXBufferVertexT(IDirect3DVertexBuffer9* pIVertexBuffer)
32 : m_pIVertexBuffer(pIVertexBuffer)
36 cDXBufferVertexT(IDirect3DVertexBuffer9* pIVertexBuffer, UINT uStart, UINT uQtyToLock, DWORD dwFlags = 0)
37 : m_pIVertexBuffer(pIVertexBuffer)
42 ASSERT(m_pIVertexBuffer !=
nullptr);
43 Lock(uStart, uQtyToLock, dwFlags);
49 bool isLockValid() const noexcept
51 return m_pVertex !=
nullptr;
53 HRESULT LockStride(
size_t nVertStride =
sizeof(cVector3f), UINT uStart = 0, UINT uQtyToLock = 0, DWORD dwFlags = 0)
58 ASSERT(m_pIVertexBuffer !=
nullptr);
59 HRESULT hRes = m_pIVertexBuffer->Lock(uStart,
60 uQtyToLock*nVertStride,
61 reinterpret_cast<void**
>(&m_pVertex),
70 HRESULT Lock(UINT uStart = 0, UINT uQtyToLock = 0, DWORD dwFlags = 0)
74 return LockStride(
sizeof(_TYPE_VERT), uStart, uQtyToLock, dwFlags);
78 if (m_pVertex !=
nullptr)
80 ASSERT(m_pIVertexBuffer !=
nullptr);
82 ASSERT(m_pIVertexBuffer !=
nullptr);
83 m_pIVertexBuffer->Unlock();
86 operator _TYPE_VERT* ()
const
88 ASSERT(m_pVertex !=
nullptr);
91 _TYPE_VERT* get_VertexPtr()
const
93 ASSERT(m_pVertex !=
nullptr);
98 template <
typename _TYPE_INDEX = WORD>
106 _TYPE_INDEX* m_pIndex;
107 IDirect3DIndexBuffer9* m_pIIndexBuffer;
109 cDXBufferIndexT(IDirect3DIndexBuffer9* pIIndexBuffer)
110 : m_pIIndexBuffer(pIIndexBuffer)
114 cDXBufferIndexT(IDirect3DIndexBuffer9* pIIndexBuffer, UINT uStart, UINT uQtyToLock, DWORD dwFlags = 0)
115 : m_pIIndexBuffer(pIIndexBuffer)
120 Lock(uStart, uQtyToLock, dwFlags);
126 bool isLockValid() const noexcept
128 return m_pIndex !=
nullptr;
130 HRESULT Lock(UINT uStart = 0, UINT uQtyToLock = 0, DWORD dwFlags = 0)
134 ASSERT(m_pIIndexBuffer !=
nullptr);
135 HRESULT hRes = m_pIIndexBuffer->Lock(uStart,
136 uQtyToLock *
sizeof(_TYPE_INDEX),
137 reinterpret_cast<void**
>(&m_pIndex),
148 if (m_pIndex !=
nullptr)
150 ASSERT(m_pIIndexBuffer !=
nullptr);
152 ASSERT(m_pIIndexBuffer !=
nullptr);
153 m_pIIndexBuffer->Unlock();
156 _TYPE_INDEX GetIndex(
int i)
const
158 ASSERT(m_pIndex !=
nullptr);
162 void SetIndex(
int i, _TYPE_INDEX wVal)
164 ASSERT(m_pIndex !=
nullptr);
168 _TYPE_INDEX* get_IndexPtr()
const
170 ASSERT(m_pIndex !=
nullptr);
173 operator _TYPE_INDEX* ()
const
175 ASSERT(m_pIndex !=
nullptr);
190 const DWORD m_dwMaxObjects;
191 const DWORD m_dwChunkObjects;
192 const size_t m_nVertStride;
195 cIUnkPtr<IDirect3DVertexBuffer9> m_pVB;
196 void* m_pVerticesLocked;
199 cDXVertexBatch(DWORD dwMaxObjects, DWORD dwChunkObjects,
size_t nVertStride)
200 : m_dwMaxObjects(dwMaxObjects)
201 , m_dwChunkObjects(dwChunkObjects)
202 , m_nVertStride(nVertStride)
203 , m_uiLockBase(dwMaxObjects)
204 , m_pVerticesLocked(nullptr)
206 ASSERT(m_dwChunkObjects < m_dwMaxObjects);
209 ~cDXVertexBatch() noexcept
213 HRESULT CreateBuffer(IDirect3DDevice9* pDevice);
221 void* GetNextChunk();
223 void RenderPrepare(DWORD dwObjects)
226 ASSERT(dwObjects <= m_dwChunkObjects);
227 if (m_pVerticesLocked ==
nullptr)
232 m_pVerticesLocked =
nullptr;
237 class GRAY3D_LINK cDXVertexBillboards :
public cDXVertexBatch
242 typedef cDXVertexBatch SUPER_t;
245 static const int k_VERTICES = 4;
246 static const int k_INDEXES = 6;
249 cDXVertexBillboards(DWORD dwMaxObjects, DWORD dwChunkObjects,
size_t nVertStride)
250 : cDXVertexBatch(dwMaxObjects, dwChunkObjects, nVertStride)
#define GRAY3D_LINK
Definition: Gray3D.h:15
#define FAILED(x)
Definition: HResult.h:30
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define LOGERR(hRes)
Used to supply "ERR='%s'".
Definition: cLogAppender.h:23
#define DEBUG_ERR(_x_)
Definition: cLogMgr.h:144
Definition: IUnknown.h:68
Definition: Gray3D.cpp:12