From 20a2da738aadae596e9273c97e74a90a4e3f295a Mon Sep 17 00:00:00 2001 From: krickw Date: Tue, 17 Aug 2021 08:34:32 -0400 Subject: [PATCH 1/2] When render tags change set the task controller render tags to the minimum set of tags rather than all tags. This saves time syncing rprims which are not drawn. --- .../vp2RenderDelegate/proxyRenderDelegate.cpp | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp b/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp index 7861e865fc..35ed7550a1 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp @@ -1183,6 +1183,7 @@ void ProxyRenderDelegate::_UpdateRenderTags() bool renderPurposeChanged = false; bool proxyPurposeChanged = false; bool guidePurposeChanged = false; + TfTokenVector changedRenderTags; _proxyShapeData->UpdatePurpose( &renderPurposeChanged, &proxyPurposeChanged, &guidePurposeChanged); if (renderPurposeChanged || proxyPurposeChanged || guidePurposeChanged) { @@ -1190,8 +1191,9 @@ void ProxyRenderDelegate::_UpdateRenderTags() HdVP2RenderDelegate::sProfilerCategory, MProfiler::kColorD_L1, "Update Purpose"); // Build the list of render tags which were added or removed (changed) - // and the list of render tags which were removed. - TfTokenVector changedRenderTags; + // and the list of render tags which were removed. Enable any purpose which + // is being modified so that _GetFilteredRprims will find prims with that + // purpose. if (renderPurposeChanged) { changedRenderTags.push_back(HdRenderTagTokens->render); } @@ -1228,10 +1230,9 @@ void ProxyRenderDelegate::_UpdateRenderTags() // When an rprim has it's renderTag changed the global render tag version // id will change. if (rprimRenderTagChanged) { - TfTokenVector renderTags = { HdRenderTagTokens->geometry, - HdRenderTagTokens->render, - HdRenderTagTokens->proxy, - HdRenderTagTokens->guide }; + TfTokenVector renderTags + = { HdRenderTagTokens->geometry }; // always draw geometry render tag purpose. + renderTags.insert(renderTags.end(), changedRenderTags.begin(), changedRenderTags.end()); _taskController->SetRenderTags(renderTags); _taskRenderTagsValid = false; } @@ -1253,6 +1254,14 @@ void ProxyRenderDelegate::_UpdateRenderTags() _taskController->SetRenderTags(renderTags); _taskRenderTagsValid = true; } + + // TODO: UsdImagingDelegate is purpose-aware. There are methods + // SetDisplayRender, SetDisplayProxy and SetDisplayGuides which inform the + // scene delegate of what is displayed, and changes the behavior of + // UsdImagingDelegate::GetRenderTag(). So far I don't see an advantage of + // using this feature for MayaUSD, but it may be useful at some point in + // the future. + _renderTagVersion = changeTracker.GetRenderTagVersion(); #ifdef ENABLE_RENDERTAG_VISIBILITY_WORKAROUND _visibilityVersion = changeTracker.GetVisibilityChangeCount(); From 308ea74db09896e90b69a9043ad46337681f3298 Mon Sep 17 00:00:00 2001 From: krickw Date: Tue, 17 Aug 2021 08:56:00 -0400 Subject: [PATCH 2/2] Remove unnecessary comment. --- lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp b/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp index 35ed7550a1..53584ab610 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp @@ -1191,9 +1191,7 @@ void ProxyRenderDelegate::_UpdateRenderTags() HdVP2RenderDelegate::sProfilerCategory, MProfiler::kColorD_L1, "Update Purpose"); // Build the list of render tags which were added or removed (changed) - // and the list of render tags which were removed. Enable any purpose which - // is being modified so that _GetFilteredRprims will find prims with that - // purpose. + // and the list of render tags which were removed. if (renderPurposeChanged) { changedRenderTags.push_back(HdRenderTagTokens->render); }