| 564 | } |
| 565 | |
| 566 | void HnRenderPass::UpdateDrawList(const pxr::TfTokenVector& RenderTags) |
| 567 | { |
| 568 | pxr::HdRenderIndex* pRenderIndex = GetRenderIndex(); |
| 569 | HnRenderDelegate* pRenderDelegate = static_cast<HnRenderDelegate*>(pRenderIndex->GetRenderDelegate()); |
| 570 | const HnRenderParam* pRenderParam = static_cast<const HnRenderParam*>(pRenderDelegate->GetRenderParam()); |
| 571 | if (pRenderParam == nullptr) |
| 572 | { |
| 573 | UNEXPECTED("Render param is null"); |
| 574 | return; |
| 575 | } |
| 576 | |
| 577 | bool DrawListDirty = false; |
| 578 | if (pRenderParam->GetSelectedPrimId() != m_SelectedPrimId) |
| 579 | { |
| 580 | m_SelectedPrimId = pRenderParam->GetSelectedPrimId(); |
| 581 | // Only update draw list, but not the draw items list |
| 582 | DrawListDirty = true; |
| 583 | } |
| 584 | |
| 585 | const pxr::HdRprimCollection& Collection = GetRprimCollection(); |
| 586 | const pxr::HdChangeTracker& Tracker = pRenderIndex->GetChangeTracker(); |
| 587 | const pxr::TfToken& MaterialTag = Collection.GetMaterialTag(); |
| 588 | |
| 589 | const unsigned int CollectionVersion = Tracker.GetCollectionVersion(Collection.GetName()); |
| 590 | const unsigned int RprimRenderTagVersion = Tracker.GetRenderTagVersion(); |
| 591 | const unsigned int TaskRenderTagsVersion = Tracker.GetTaskRenderTagsVersion(); |
| 592 | const unsigned int GeomSubsetDrawItemsVersion = pRenderParam->GetAttribVersion(HnRenderParam::GlobalAttrib::GeometrySubsetDrawItems); |
| 593 | |
| 594 | const bool CollectionChanged = (m_GlobalAttribVersions.Collection != CollectionVersion); |
| 595 | const bool RprimRenderTagChanged = (m_GlobalAttribVersions.RprimRenderTag != RprimRenderTagVersion); |
| 596 | const bool MaterialTagChanged = (m_MaterialTag != MaterialTag); |
| 597 | const bool GeomSubsetDrawItemsChanged = (m_GlobalAttribVersions.GeomSubsetDrawItems != GeomSubsetDrawItemsVersion); |
| 598 | |
| 599 | bool TaskRenderTagsChanged = false; |
| 600 | if (m_GlobalAttribVersions.TaskRenderTags != TaskRenderTagsVersion) |
| 601 | { |
| 602 | m_GlobalAttribVersions.TaskRenderTags = TaskRenderTagsVersion; |
| 603 | if (m_RenderTags != RenderTags) |
| 604 | { |
| 605 | m_RenderTags = RenderTags; |
| 606 | TaskRenderTagsChanged = true; |
| 607 | } |
| 608 | } |
| 609 | |
| 610 | // Do not update draw items list when selection changes as GetDrawItems() is an expensive call. |
| 611 | if (CollectionChanged || |
| 612 | RprimRenderTagChanged || |
| 613 | MaterialTagChanged || |
| 614 | GeomSubsetDrawItemsChanged || |
| 615 | TaskRenderTagsChanged) |
| 616 | { |
| 617 | m_DrawItems.clear(); |
| 618 | //const HnRenderParam* const RenderParam = static_cast<HnRenderParam*>(pRenderIndex->GetRenderDelegate()->GetRenderParam()); |
| 619 | //if (RenderParam->HasMaterialTag(Collection.GetMaterialTag())) |
| 620 | { |
| 621 | m_DrawItems = pRenderIndex->GetDrawItems(Collection, RenderTags); |
| 622 | // GetDrawItems() uses multithreading, so the order of draw items is not deterministic. |
| 623 | std::sort(m_DrawItems.begin(), m_DrawItems.end()); |
nothing calls this directly
no test coverage detected