One of my team members insists we use a singleton for our renderer to avoid passing the d3d device pointer in every object's render function.
I implemented a quick mock up of the singleton, however I am not happy with it.
game render function
void CShell::Render(){ //start the render process if(CDirectXRenderer::GetInstance()->BeginScene()) { terrain.Render(); CDirectXRenderer::GetInstance()->EndScene(); }}terrain render function
void CD3DTerrain::Render(){ //set buffers as source CDirectXRenderer::GetInstance()->m_pD3DDevice->SetStreamSource(0,m_pVertexBuffer, 0, sizeof(sCUSTOMVERTEX)); CDirectXRenderer::GetInstance()->m_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX); CDirectXRenderer::GetInstance()->m_pD3DDevice->SetIndices(m_pIndexBuffer); //draw terrain D3DXMATRIX worldMat; D3DXMatrixIdentity(&worldMat); CDirectXRenderer::GetInstance()->m_pD3DDevice->SetTransform(D3DTS_WORLD, &worldMat); CDirectXRenderer::GetInstance()->m_pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0,numVertsX * numVertsZ, 0, cellsWide*cellsHigh*2);}It works but seems messy to have the renderer so out in the open. Also note most of the rendering code will change once I implement a scene graph system.
Any advice on a clean (not having to pass pointers every line) but safer system than having the rendering object global?