Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //////////////////////////////////////////////////////////////////////////
- // renderPrimitives
- class ScnModelComponentRenderNode: public RsRenderNode
- {
- public:
- void render()
- {
- PSY_PROFILER_SECTION( RenderRoot, "ScnModelComponentRenderNode::render" );
- pContext_->setIndexBuffer( IndexBuffer_ );
- pContext_->setVertexBuffer( 0, VertexBuffer_, VertexStride_ );
- pContext_->setVertexDeclaration( VertexDeclaration_ );
- pContext_->drawIndexedPrimitives( Type_, Offset_, NoofIndices_, 0 );
- }
- RsTopologyType Type_;
- BcU32 Offset_;
- BcU32 NoofIndices_;
- RsBuffer* IndexBuffer_;
- RsBuffer* VertexBuffer_;
- BcU32 VertexStride_;
- RsVertexDeclaration* VertexDeclaration_;
- };
- void ScnModelComponent::render( class ScnViewComponent* pViewComponent, RsFrame* pFrame, RsRenderSort Sort )
- {
- PSY_PROFILER_SECTION( RenderRoot, std::string( "ScnModelComponent::render (" ) + *getName() + std::string( ")" ) );
- Super::render( pViewComponent, pFrame, Sort );
- // Wait for model to have updated.
- UpdateFence_.wait();
- // Gather lights.
- ScnLightingVisitor LightingVisitor( this );
- ScnModelMeshRuntimeList& MeshRuntimes = Parent_->MeshRuntimes_;
- ScnModelMeshData* pMeshDatas = Parent_->pMeshData_;
- // Set layer.
- Sort.Layer_ = Layer_;
- Sort.Pass_ = Pass_;
- for( BcU32 PrimitiveIdx = 0; PrimitiveIdx < MeshRuntimes.size(); ++PrimitiveIdx )
- {
- ScnModelMeshRuntime* pMeshRuntime = &MeshRuntimes[ PrimitiveIdx ];
- ScnModelMeshData* pMeshData = &pMeshDatas[ pMeshRuntime->MeshDataIndex_ ];
- ScnModelNodeTransformData* pNodeTransformData = &pNodeTransformData_[ pMeshData->NodeIndex_ ];
- TPerComponentMeshData& PerComponentMeshData = PerComponentMeshDataList_[ PrimitiveIdx ];
- BcU32 Offset = 0; // This will change when index buffers are merged.
- BcAssertMsg( PerComponentMeshData.MaterialComponentRef_.isValid(), "Material not valid for use on ScnModelComponent \"%s\"", (*getName()).c_str() );
- // Set skinning parameters.
- if( pMeshData->IsSkinned_ )
- {
- PerComponentMeshData.MaterialComponentRef_->setBoneUniformBlock( PerComponentMeshData.UniformBuffer_ );
- }
- else
- {
- PerComponentMeshData.MaterialComponentRef_->setObjectUniformBlock( PerComponentMeshData.UniformBuffer_ );
- }
- // Set lighting parameters.
- LightingVisitor.setMaterialParameters( PerComponentMeshData.MaterialComponentRef_ );
- // Set material components for view.
- pViewComponent->setMaterialParameters( PerComponentMeshData.MaterialComponentRef_ );
- // Bind material.
- PerComponentMeshData.MaterialComponentRef_->bind( pFrame, Sort );
- // Render primitive.
- ScnModelComponentRenderNode* pRenderNode = pFrame->newObject< ScnModelComponentRenderNode >();
- pRenderNode->Type_ = pMeshData->Type_;
- pRenderNode->Offset_ = Offset;
- pRenderNode->NoofIndices_ = pMeshData->NoofIndices_;
- pRenderNode->IndexBuffer_ = pMeshRuntime->pIndexBuffer_;
- pRenderNode->VertexBuffer_ = pMeshRuntime->pVertexBuffer_;
- pRenderNode->VertexStride_ = pMeshData->VertexStride_;
- pRenderNode->VertexDeclaration_ = pMeshRuntime->pVertexDeclaration_;
- pRenderNode->Sort_ = Sort;
- pFrame->addRenderNode( pRenderNode );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement