Files
hwr2023_b/GDP/D3D9/Mesh.cpp
T

79 lines
1.9 KiB
C++

#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<void**>(&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;
}