#include "Mesh.h" #include "Utilities.h" #include "Vertex.h" UINT Mesh::init(IDirect3DDevice9* pD3DDevice) { UINT error = 0; error = createVertexBuffer(pD3DDevice); CheckError(error); error = createIndexBuffer(pD3DDevice); CheckError(error); return 0; } void Mesh::update(FLOAT dt) { } void Mesh::render(IDirect3DDevice9* pD3DDevice) { // 1. set mesh data pD3DDevice->SetStreamSource(0, _pVertexBuffer, 0, _vertexStride); pD3DDevice->SetFVF(FVF); // 2. draw call // vertex buffer only pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, _vertexCount / 3); } void Mesh::deInit() { safeRelease(_pIndexBuffer); safeRelease(_pVertexBuffer); } UINT Mesh::createVertexBuffer(IDirect3DDevice9* pD3DDevice) { // 1. define mesh parameters _vertexCount = 3; _vertexStride = sizeof(Vertex); // 2. create vertex buffer object WITHOUT data HRESULT hr = pD3DDevice->CreateVertexBuffer( _vertexCount * _vertexStride, // vertex buffer size in bytes D3DUSAGE_WRITEONLY, // how to access the buffer FVF, // FVF - Flexible Vertex Format D3DPOOL_MANAGED, // video memory management &_pVertexBuffer, // vertex buffer object nullptr // not used anymore ); CheckFailed(hr, 300); // 3. set vertex data Vertex* pVertices = nullptr; hr = _pVertexBuffer->Lock(0, 0, reinterpret_cast(&pVertices), 0); // transfer vertex buffer from video memory to cpu memory CheckFailed(hr, 310); // fill vertex buffer with data pVertices[0] = Vertex(0.0f, 0.5f, 0.0f); pVertices[1] = Vertex(0.5f, -0.5f, 0.0f); pVertices[2] = Vertex(-0.5f, -0.5f, 0.0f); hr = _pVertexBuffer->Unlock(); // transfer vertex buffer back from cpu memory to video memory CheckFailed(hr, 320); pVertices = nullptr; return 0; } UINT Mesh::createIndexBuffer(IDirect3DDevice9* pD3DDevice) { return 0; }