renderablemesh.cpp

来自「java实现的简单的分形树。简单易学!是学习分形知识的很好的例子。其java语法」· C++ 代码 · 共 65 行

CPP
65
字号
// --------------------------------------------------------------------------
// Dingus project - a collection of subsystems for game/graphics applications
// --------------------------------------------------------------------------
#include "stdafx.h"

#include "RenderableMesh.h"
#include "RenderContext.h"
#include "../utils/Errors.h"
#include "../kernel/D3DDevice.h"


using namespace dingus;

DEFINE_POOLED_ALLOC(dingus::CRenderableMesh,256,false);


CRenderableMesh::CRenderableMesh( CMesh& mesh, int group, const SVector3* origin, int priority )
:	CRenderable( origin, priority ),
	mMesh( &mesh ),
	mGroup( group )
{
	assert( group >= 0 && group < mesh.getGroupCount() || group == ALL_GROUPS );
	assert( mesh.isCreated() );
}


void CRenderableMesh::render( CRenderContext const& ctx )
{
	assert( mMesh );

	HRESULT hres;
	//IDirect3DIndexBuffer9* ib = &mMesh->getIB();
	//IDirect3DVertexBuffer9* vb = &mMesh->getVB();
	//assert( ib && vb );

	CD3DDevice& device = CD3DDevice::getInstance();
	IDirect3DDevice9& dx = device.getDevice();
	CRenderStats& stats = device.getStats();

	device.setIndexBuffer( &mMesh->getIB() );
	device.setVertexBuffer( 0, &mMesh->getVB(), 0, mMesh->getVertexStride() );
	device.setDeclaration( mMesh->getVertexDecl() );

	if( mGroup == ALL_GROUPS ) {
		hres = dx.DrawIndexedPrimitive( D3DPT_TRIANGLELIST,
			0, 0, mMesh->getVertexCount(),
			0, mMesh->getIndexCount()/3 );
		stats.incVerticesRendered( mMesh->getVertexCount() );
		stats.incPrimsRendered( mMesh->getIndexCount()/3 );
	} else {
		const CMesh::CGroup& group = mMesh->getGroup( mGroup );
		hres = dx.DrawIndexedPrimitive( D3DPT_TRIANGLELIST,
			0, group.getFirstVertex(), group.getVertexCount(),
			group.getFirstPrim() * 3, group.getPrimCount() );
		stats.incVerticesRendered( group.getVertexCount() );
		stats.incPrimsRendered( group.getPrimCount() );
	}
	if( FAILED( hres ) ) {
		THROW_DXERROR( hres, "failed to DIP" );
	}

	// stats
	stats.incDrawCalls();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?