www.pudn.com > zfxcengine-0.1.0.zip > ceRenderObjectFactory_D3D9.cpp
#include#include #include "Core/ceDebug.h" #include "Core/ceExceptions.h" #include "Render/RenderD3D9/ceRenderObjectFactory_D3D9.h" #include "Core/ceMemManager.h" using std::cout; using std::endl; namespace ZFXCE { namespace Render { /////////////////////////////////////////////////////////////////////////// ceRenderObjectFactoryD3D9::ceRenderObjectFactoryD3D9(void):m_pD3DDevice(NULL) { PUSH_FUNCTION; } /////////////////////////////////////////////////////////////////////////// ceRenderObjectFactoryD3D9::ceRenderObjectFactoryD3D9(LPDIRECT3DDEVICE9 D3DDevice):m_pD3DDevice(D3DDevice) { PUSH_FUNCTION; } /////////////////////////////////////////////////////////////////////////// ceRenderObjectFactoryD3D9::~ceRenderObjectFactoryD3D9(void) { PUSH_FUNCTION; m_pD3DDevice = NULL; ReleaseAllObjects(); } /////////////////////////////////////////////////////////////////////////// int ceRenderObjectFactoryD3D9::AddObject(void) { PUSH_FUNCTION; int iIndex = -1; if( !m_FreeIndices.empty() ) { iIndex = m_FreeIndices.top(); m_FreeIndices.pop(); } else { iIndex = (int)m_RenderObjects.size(); m_RenderObjects.resize(iIndex+1); } return iIndex; } /////////////////////////////////////////////////////////////////////////// INT ceRenderObjectFactoryD3D9::CreateStaticVertexBuffer(const cePrimitive Primitive, ceVertexDescription& VertexDesc, const FLOAT* pVertices, const UINT uiNumOfVertices) { PUSH_FUNCTION; assert(m_pD3DDevice != NULL); int iIndex = -1; ceVertexBufferD3D9* pVB = NULL; pVB = new ceVertexBufferD3D9(m_pD3DDevice); if(!pVB) CE_EXCEPTION("Konnte keinen VB erstellen!", CELS_ERROR); pVB->CreateStatic(Primitive, VertexDesc, pVertices, uiNumOfVertices); /* std::pair objectpair(m_mapRenderObjects.size(), pVB); m_mapRenderObjects.insert(objectpair);*/ iIndex = AddObject(); m_RenderObjects[iIndex] = pVB; return iIndex; } /////////////////////////////////////////////////////////////////////////// INT ceRenderObjectFactoryD3D9::CreateDynamicVertexBuffer(const cePrimitive Primitive, ceVertexDescription& VertexDesc, const FLOAT* pVertices, const UINT uiNumOfVertices) { PUSH_FUNCTION; assert(m_pD3DDevice != NULL); int iIndex = -1; ceVertexBufferD3D9* pVB = NULL; pVB = new ceVertexBufferD3D9(m_pD3DDevice); if(!pVB) CE_EXCEPTION("Konnte keinen VertexBuffer erstellen!", CELS_ERROR); pVB->CreateDynamic(Primitive, VertexDesc, pVertices, uiNumOfVertices); /* std::pair objectpair(m_mapRenderObjects.size(), pVB); m_mapRenderObjects.insert(objectpair);*/ iIndex = AddObject(); m_RenderObjects[iIndex] = pVB; return iIndex; } /////////////////////////////////////////////////////////////////////////// INT ceRenderObjectFactoryD3D9::CreateStaticIndexBuffer(const cePrimitive Primitive, UINT uiNumOfIndices, const WORD *pIndices) { PUSH_FUNCTION; assert(m_pD3DDevice != NULL); int iIndex = -1; ceIndexBufferD3D9* pIB = new ceIndexBufferD3D9(m_pD3DDevice); pIB->Create(Primitive, FALSE, uiNumOfIndices, pIndices); iIndex = AddObject(); m_RenderObjects[iIndex] = pIB; return iIndex; /* std::pair objectpair(m_mapRenderObjects.size(), IB); m_mapRenderObjects.insert(objectpair); return ( (UINT) m_mapRenderObjects.size()-1);*/ } /////////////////////////////////////////////////////////////////////////// INT ceRenderObjectFactoryD3D9::CreateStaticIndexBuffer(const cePrimitive Primitive, UINT uiNumOfIndices, const UINT *pIndices) { PUSH_FUNCTION; assert(m_pD3DDevice != NULL); int iIndex = -1; ceIndexBufferD3D9* pIB = new ceIndexBufferD3D9(m_pD3DDevice); pIB->Create(Primitive, FALSE, uiNumOfIndices, pIndices); iIndex = AddObject(); m_RenderObjects[iIndex] = pIB; return iIndex; /* std::pair objectpair(m_mapRenderObjects.size(), pIB); m_mapRenderObjects.insert(objectpair); return ( (UINT) m_mapRenderObjects.size()-1);*/ } /////////////////////////////////////////////////////////////////////////// void ceRenderObjectFactoryD3D9::ReleaseAllObjects(void) { RenderObjectIterator it = m_RenderObjects.begin(); for(;it != m_RenderObjects.end(); it++) { delete (*it); } m_RenderObjects.clear(); while (!m_FreeIndices.empty()) m_FreeIndices.pop(); /* RenderObjectMapIterator It = m_mapRenderObjects.begin(); for(;It != m_mapRenderObjects.end(); It++) { delete It->second; m_mapRenderObjects.erase(It); } m_mapRenderObjects.clear();*/ } /////////////////////////////////////////////////////////////////////////// void ceRenderObjectFactoryD3D9::ReleaseObject(INT ID) { if(0 <= ID && ID < (int)m_RenderObjects.size()) { delete m_RenderObjects[ID]; m_FreeIndices.push(ID); } } /////////////////////////////////////////////////////////////////////////// ceRenderObject* ceRenderObjectFactoryD3D9::GetRenderObject(INT ID) { assert(0 <= ID && ID < (int)m_RenderObjects.size()); return m_RenderObjects[ID]; } } // namespace Render } // namespace ZFXCE