diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index 8259bee12f..70c21b5c35 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -1438,10 +1438,9 @@ void HdVP2BasisCurves::_InitRepr(TfToken const &reprToken, HdDirtyBits *dirtyBit if (ARCH_UNLIKELY(!subSceneContainer)) return; - // We don't create a repr for the selection token because it serves for - // selection state update only. Mark DirtySelection bit that will be - // automatically propagated to all draw items of the rprim. - if (reprToken == HdVP2ReprTokens->selection) { + // Update selection state on demand or when it is a new Rprim. DirtySelection + // will be propagated to all draw items, to trigger sync for each repr. + if (reprToken == HdVP2ReprTokens->selection || _reprs.empty()) { const HdVP2SelectionStatus selectionState = param->GetDrawScene().GetPrimSelectionStatus(GetId()); if (_selectionState != selectionState) { @@ -1451,7 +1450,11 @@ void HdVP2BasisCurves::_InitRepr(TfToken const &reprToken, HdDirtyBits *dirtyBit else if (_selectionState == kPartiallySelected) { *dirtyBits |= DirtySelection; } - return; + + // We don't create a repr for the selection token because it serves for + // selection state update only. Return from here. + if (reprToken == HdVP2ReprTokens->selection) + return; } // If the repr has any draw item with the DirtySelection bit, mark the diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index d3dcf8d5c3..8d58a42b38 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -607,10 +607,9 @@ void HdVP2Mesh::_InitRepr(const TfToken& reprToken, HdDirtyBits* dirtyBits) { if (ARCH_UNLIKELY(!subSceneContainer)) return; - // We don't create a repr for the selection token because it serves for - // selection state update only. Mark DirtySelection bit that will be - // automatically propagated to all draw items of the rprim. - if (reprToken == HdVP2ReprTokens->selection) { + // Update selection state on demand or when it is a new Rprim. DirtySelection + // will be propagated to all draw items, to trigger sync for each repr. + if (reprToken == HdVP2ReprTokens->selection || _reprs.empty()) { const HdVP2SelectionStatus selectionState = param->GetDrawScene().GetPrimSelectionStatus(GetId()); if (_selectionState != selectionState) { @@ -620,7 +619,11 @@ void HdVP2Mesh::_InitRepr(const TfToken& reprToken, HdDirtyBits* dirtyBits) { else if (_selectionState == kPartiallySelected) { *dirtyBits |= DirtySelection; } - return; + + // We don't create a repr for the selection token because it serves for + // selection state update only. Return from here. + if (reprToken == HdVP2ReprTokens->selection) + return; } // If the repr has any draw item with the DirtySelection bit, mark the