www.pudn.com > GameEngine.rar > GameEngine_VertexBuffer.cpp, change:2005-09-07,size:1943b
#include "..\GameEngine_Common.h"
#include "GameEngine_VertexBuffer.h"
#include "..\GameEngine_SceneManager\GameEngine_SceneManager.h"
CGameEngine_VertexBuffer::CGameEngine_VertexBuffer(CGameEngine_SceneManager* pGameSceneManager){
m_pGameSceneManager=pGameSceneManager;
}
CGameEngine_VertexBuffer::~CGameEngine_VertexBuffer(){
Closedown();
}
bool CGameEngine_VertexBuffer::Create(unsigned long NumVertices, DWORD dwFVF){
m_FVF=dwFVF;
m_NumVertices=NumVertices;
m_VertexSize=D3DXGetFVFVertexSize(m_FVF);
if(m_NumVertices==0 || m_VertexSize==0)
return false;
if(FAILED(m_pGameSceneManager->GetDevice()->CreateVertexBuffer(
m_NumVertices * m_VertexSize,0, m_FVF,
D3DPOOL_MANAGED, &m_pVertexBuffer,NULL)))
return false;
return true;
}
bool CGameEngine_VertexBuffer::Lock(unsigned long StartVertex,unsigned long NumVertices)
{
if(m_pVertexBuffer == NULL)
return false;
if(FAILED(m_pVertexBuffer->Lock(StartVertex * m_VertexSize,
NumVertices * m_VertexSize, (void**)&m_pVertexData,0)))
return false;
return true;
}
BYTE* CGameEngine_VertexBuffer::GetVBDataPt(){
return m_pVertexData;
}
bool CGameEngine_VertexBuffer::Unlock()
{
if(m_pVertexBuffer == NULL)
return false;
if(FAILED(m_pVertexBuffer->Unlock()))
return false;
return true;
}
void CGameEngine_VertexBuffer::SendData(){
m_pGameSceneManager->GetDevice()->SetStreamSource(0,m_pVertexBuffer,0,m_VertexSize);
m_pGameSceneManager->GetDevice()->SetFVF(m_FVF);
}
bool CGameEngine_VertexBuffer::Render(unsigned long StartVertex, unsigned long TriangleCount, DWORD Type)
{
if(m_pVertexBuffer == NULL)
return false;
m_pGameSceneManager->GetDevice()->DrawPrimitive((D3DPRIMITIVETYPE)Type,StartVertex,TriangleCount);
return true;
}
void CGameEngine_VertexBuffer::Closedown(){
SafeRelease(m_pVertexBuffer);
m_pVertexData=NULL;
m_pGameSceneManager=NULL;
}