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; 
}