| 412 | } |
| 413 | |
| 414 | void 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 | |
| 447 | static std::shared_ptr<pxr::HdBufferSource> CreateBufferSource(const pxr::TfToken& Name, const pxr::VtValue& Data, size_t ExpectedNumElements, const pxr::SdfPath& MeshId) |
| 448 | { |
nothing calls this directly
no test coverage detected