Example #1
0
void DX11DeferredRenderer::DrawNodes(const vector<VolumeComponent*>& meshes, const FrameInfo& frame_info){

	graphics_.PushEvent(L"Geometry");

	ObjectPtr<DX11Mesh> mesh;
	ObjectPtr<DX11DeferredRendererMaterial> material;

	// TODO: Implement some batching strategy here!

	for (auto&& node : meshes){

		for (auto&& drawable : node->GetComponents<AspectComponent<DeferredRendererMaterial>>()){

			// Bind the mesh

			mesh = drawable.GetMesh();

			graphics_.PushEvent(mesh->GetName());

			mesh->Bind(*immediate_context_);

			// For each subset

			for (unsigned int subset_index = 0; subset_index < mesh->GetSubsetCount(); ++subset_index){
				
				graphics_.PushEvent(mesh->GetSubsetName(subset_index));

				// Bind the subset material

				material = drawable.GetMaterial(subset_index);

				material->SetMatrix(drawable.GetWorldTransform(),
									frame_info.view_proj_matrix);

				material->Bind(*immediate_context_);

				// Draw	the subset

				mesh->DrawSubset(*immediate_context_, 
								 subset_index);

				graphics_.PopEvent();

			}

			graphics_.PopEvent();

		}

	}

	graphics_.PopEvent();

}