MCPcopy Create free account
hub / github.com/DiligentGraphics/DiligentFX / UpdateTopology

Method UpdateTopology

Hydrogent/src/HnMesh.cpp:414–445  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

412}
413
414void HnMesh::UpdateTopology(pxr::HdSceneDelegate& SceneDelegate,
415 pxr::HdRenderParam* RenderParam,
416 pxr::HdDirtyBits& DirtyBits,
417 const pxr::TfToken& ReprToken)
418{
419 const pxr::SdfPath& Id = GetId();
420 VERIFY_EXPR(pxr::HdChangeTracker::IsTopologyDirty(DirtyBits, Id));
421
422 pxr::HdMeshTopology Topology = HdMesh::GetMeshTopology(&SceneDelegate);
423 bool GeomSubsetsChanged = Topology.GetGeomSubsets() != m_Topology.GetGeomSubsets();
424
425 m_Topology = Topology;
426 if (GeomSubsetsChanged)
427 {
428 UpdateDrawItemsForGeometrySubsets(SceneDelegate, RenderParam);
429 if (RenderParam != nullptr)
430 {
431 static_cast<HnRenderParam*>(RenderParam)->MakeAttribDirty(HnRenderParam::GlobalAttrib::GeometrySubsetDrawItems);
432 }
433 }
434
435 m_StagingIndexData = std::make_unique<StagingIndexData>();
436
437 m_StagingIndexData->Faces = ComputeTriangleFaceIndices();
438 pxr::HdMeshUtil MeshUtil{&m_Topology, Id};
439 MeshUtil.EnumerateEdges(&m_StagingIndexData->MeshEdgeIndices);
440 m_IndexData.Subsets = m_StagingIndexData->Faces.Subsets;
441 m_IndexData.NumFaceTriangles = static_cast<Uint32>(m_StagingIndexData->Faces.Indices.size());
442 m_IndexData.NumEdges = static_cast<Uint32>(m_StagingIndexData->MeshEdgeIndices.size());
443
444 DirtyBits &= ~pxr::HdChangeTracker::DirtyTopology;
445}
446
447static std::shared_ptr<pxr::HdBufferSource> CreateBufferSource(const pxr::TfToken& Name, const pxr::VtValue& Data, size_t ExpectedNumElements, const pxr::SdfPath& MeshId)
448{

Callers

nothing calls this directly

Calls 1

MakeAttribDirtyMethod · 0.80

Tested by

no test coverage detected