From a4074eaf26d64be11d8f60b5a12d2fd0b84d783e Mon Sep 17 00:00:00 2001 From: krickw Date: Wed, 10 Jun 2020 13:58:33 -0400 Subject: [PATCH 1/2] Remove duplicate instance indices. --- .../render/vp2RenderDelegate/basisCurves.cpp | 21 ++++++++++++++++++ lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 22 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index 8eb83e5f47..126c610bf9 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -1101,6 +1101,26 @@ HdVP2BasisCurves::_UpdateDrawItem( } } else if (auto state = drawScene.GetPrimSelectionState(id)) { +#if USD_VERSION_NUM <= 2005 + // In 20.05 and older GetPrimSelectionState may have duplicate entries + // in instanceIndices, which will cause Maya to draw that instance multiple + // times. Remove the duplicates here to avoid that problem. + std::vector selectedIndices; + selectedIndices.resize(instanceCount); // bool default ctor sets the value to false + for (const auto& indexArray : state->instanceIndices) { + for (const auto index : indexArray) { + selectedIndices[index] = true; + } + } + for (unsigned int index=0; indexinstanceIndices) { for (const auto index : indexArray) { transforms[index].Get(instanceMatrix.matrix); @@ -1108,6 +1128,7 @@ HdVP2BasisCurves::_UpdateDrawItem( stateToCommit._instanceTransforms.append(instanceMatrix); } } +#endif } } else { diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 29fd2430ef..0e8485fa5d 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -16,6 +16,7 @@ #include "mesh.h" #include +#include #include #include @@ -1293,6 +1294,26 @@ void HdVP2Mesh::_UpdateDrawItem( } } else if (auto state = drawScene.GetPrimSelectionState(id)) { +#if USD_VERSION_NUM <= 2005 + // In 20.05 and older GetPrimSelectionState may have duplicate entries + // in instanceIndices, which will cause Maya to draw that instance multiple + // times. Remove the duplicates here to avoid that problem. + std::vector selectedIndices; + selectedIndices.resize(instanceCount); // bool default ctor sets the value to false + for (const auto& indexArray : state->instanceIndices) { + for (const auto index : indexArray) { + selectedIndices[index] = true; + } + } + for (unsigned int index=0; indexinstanceIndices) { for (const auto index : indexArray) { transforms[index].Get(instanceMatrix.matrix); @@ -1300,6 +1321,7 @@ void HdVP2Mesh::_UpdateDrawItem( stateToCommit._instanceTransforms.append(instanceMatrix); } } +#endif } } else { From ba7666d2146b49584b48462c4f5132d0a4c3895d Mon Sep 17 00:00:00 2001 From: krickw Date: Wed, 10 Jun 2020 15:47:53 -0400 Subject: [PATCH 2/2] Remove unused header. --- lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 0e8485fa5d..7dd7ecc846 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -16,7 +16,6 @@ #include "mesh.h" #include -#include #include #include