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

Method UpdateDrawList

Hydrogent/src/HnRenderPass.cpp:566–664  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

564}
565
566void 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());

Callers

nothing calls this directly

Calls 3

GetRenderParamMethod · 0.80
GetAttribVersionMethod · 0.80
IsValidMethod · 0.80

Tested by

no test coverage detected