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