diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h index 05d374e9f1..151bb55ef3 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h @@ -67,9 +67,14 @@ struct MayaPrimCommon { enum DirtyBits : HdDirtyBits { + // The rprim has been added, removed or otherwise changed such that the selection highlight + // for the item is dirty DirtySelectionHighlight = HdChangeTracker::CustomBitsBegin, + // Maya's selection mode has changed, for example into point snapping mode DirtySelectionMode = (DirtySelectionHighlight << 1), - DirtyBitLast = DirtySelectionMode + // Maya's display mode has changed, for example for shaded to wireframe + DirtyDisplayMode = (DirtySelectionMode << 1), + DirtyBitLast = DirtyDisplayMode }; }; diff --git a/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp b/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp index f843346a5f..7e33485d87 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp @@ -825,13 +825,22 @@ void ProxyRenderDelegate::_Execute(const MHWRender::MFrameContext& frameContext) } } - if (_defaultCollection->GetReprSelector() != reprSelector) { - _defaultCollection->SetReprSelector(reprSelector); - _taskController->SetCollection(*_defaultCollection); - } - // if there are no repr's to update then don't even call sync. if (reprSelector != HdReprSelector()) { + if (_defaultCollection->GetReprSelector() != reprSelector) { + _defaultCollection->SetReprSelector(reprSelector); + _taskController->SetCollection(*_defaultCollection); + + // Mark everything "dirty" so that sync is called on everything + // If there are multiple views up with different viewport modes then + // this is slow. + auto& rprims = _renderIndex->GetRprimIds(); + HdChangeTracker& changeTracker = _renderIndex->GetChangeTracker(); + for (auto path : rprims) { + changeTracker.MarkRprimDirty(path, MayaPrimCommon::DirtyDisplayMode); + } + } + _engine.Execute(_renderIndex.get(), &_dummyTasks); } } @@ -1263,7 +1272,7 @@ void ProxyRenderDelegate::_UpdateSelectionStates() // now that the appropriate prims have been marked dirty trigger // a sync so that they all update. - HdRprimCollection collection(HdTokens->geometry, kSmoothHullReprSelector); + HdRprimCollection collection(HdTokens->geometry, _defaultCollection->GetReprSelector()); collection.SetRootPaths(rootPaths); _taskController->SetCollection(collection); _engine.Execute(_renderIndex.get(), &_dummyTasks);