From e8e089820dbdceb128c1023581c8cf8302273f0b Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Tue, 8 Feb 2022 11:13:20 -0500 Subject: [PATCH 01/13] Merging function _CreateBoundingBoxRenderItem --- .../render/vp2RenderDelegate/basisCurves.cpp | 29 +---------------- .../render/vp2RenderDelegate/basisCurves.h | 1 - .../vp2RenderDelegate/mayaPrimCommon.cpp | 27 ++++++++++++++++ .../render/vp2RenderDelegate/mayaPrimCommon.h | 2 ++ lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 31 +------------------ lib/mayaUsd/render/vp2RenderDelegate/mesh.h | 1 - 6 files changed, 31 insertions(+), 60 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index a96890ecac..a374ed01fa 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -1437,7 +1437,7 @@ void HdVP2BasisCurves::_InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBit } // The item is used for bbox display and selection highlight. else if (reprToken == HdVP2ReprTokens->bbox) { - renderItem = _CreateBBoxRenderItem(renderItemName); + renderItem = _CreateBoundingBoxRenderItem(renderItemName, kOpaqueGray, MSelectionMask::kSelectNurbsCurves, MHWRender::MFrameContext::kExcludeNurbsCurves); drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight); #ifdef HAS_DEFAULT_MATERIAL_SUPPORT_API renderItem->setDefaultMaterialHandling(MRenderItem::SkipWhenDefaultMaterialActive); @@ -1676,33 +1676,6 @@ MHWRender::MRenderItem* HdVP2BasisCurves::_CreateWireRenderItem(const MString& n return renderItem; } -/*! \brief Create render item for bbox repr. - */ -MHWRender::MRenderItem* HdVP2BasisCurves::_CreateBBoxRenderItem(const MString& name) const -{ - MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create( - name, MHWRender::MRenderItem::DecorationItem, MHWRender::MGeometry::kLines); - - renderItem->setDrawMode(MHWRender::MGeometry::kBoundingBox); - renderItem->castsShadows(false); - renderItem->receivesShadows(false); - renderItem->setShader(_delegate->Get3dSolidShader(kOpaqueGray)); - renderItem->setSelectionMask(MSelectionMask::kSelectNurbsCurves); -#ifdef MAYA_MRENDERITEM_UFE_IDENTIFIER_SUPPORT - auto* const param = static_cast(_delegate->GetRenderParam()); - ProxyRenderDelegate& drawScene = param->GetDrawScene(); - drawScene.setUfeIdentifiers(*renderItem, _PrimSegmentString); -#endif - -#if MAYA_API_VERSION >= 20220000 - renderItem->setObjectTypeExclusionFlag(MHWRender::MFrameContext::kExcludeNurbsCurves); -#endif - - _SetWantConsolidation(*renderItem, true); - - return renderItem; -} - /*! \brief Create render item for smoothHull repr. */ MHWRender::MRenderItem* HdVP2BasisCurves::_CreatePatchRenderItem(const MString& name) const diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h index f7bcee652e..32bb5a1d5e 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h @@ -149,7 +149,6 @@ class HdVP2BasisCurves final MHWRender::MRenderItem* _CreatePatchRenderItem(const MString& name) const; MHWRender::MRenderItem* _CreateWireRenderItem(const MString& name) const; - MHWRender::MRenderItem* _CreateBBoxRenderItem(const MString& name) const; #ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT MHWRender::MRenderItem* _CreatePointsRenderItem(const MString& name) const; diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp index 3b2851e275..2084ffc7cc 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp @@ -288,4 +288,31 @@ void MayaUsdRPrim::_PropagateDirtyBitsCommon(HdDirtyBits& bits, const ReprVector } } +/*! \brief Create render item for bbox repr. + */ +MHWRender::MRenderItem* MayaUsdRPrim::_CreateBoundingBoxRenderItem(const MString& name, const MColor& color, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const +{ + MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create( + name, MHWRender::MRenderItem::DecorationItem, MHWRender::MGeometry::kLines); + + renderItem->setDrawMode(MHWRender::MGeometry::kBoundingBox); + renderItem->castsShadows(false); + renderItem->receivesShadows(false); + renderItem->setShader(_delegate->Get3dSolidShader(color)); + renderItem->setSelectionMask(selectionMask); +#ifdef MAYA_MRENDERITEM_UFE_IDENTIFIER_SUPPORT + auto* const param = static_cast(_delegate->GetRenderParam()); + ProxyRenderDelegate& drawScene = param->GetDrawScene(); + drawScene.setUfeIdentifiers(*renderItem, _PrimSegmentString); +#endif + +#if MAYA_API_VERSION >= 20220000 + renderItem->setObjectTypeExclusionFlag(exclusionFlag); +#endif + + _SetWantConsolidation(*renderItem, true); + + return renderItem; +} + PXR_NAMESPACE_CLOSE_SCOPE diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h index f112f33368..62c81b47ad 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h @@ -186,6 +186,8 @@ class MayaUsdRPrim //! Helper utility function to adapt Maya API changes. static void _SetWantConsolidation(MHWRender::MRenderItem& renderItem, bool state); + MHWRender::MRenderItem* _CreateBoundingBoxRenderItem(const MString& name, const MColor& color, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const; + //! VP2 render delegate for which this prim was created HdVP2RenderDelegate* _delegate { nullptr }; diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 8ec2dd9789..0ba52e8c9f 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -54,8 +54,6 @@ namespace { const TfTokenVector sFallbackShaderPrimvars = { HdTokens->displayColor, HdTokens->displayOpacity, HdTokens->normals }; -const MColor kOpaqueBlue(0.0f, 0.0f, 1.0f, 1.0f); //!< Opaque blue - //! Helper utility function to fill primvar data to vertex buffer. template void _FillPrimvarData( @@ -1281,7 +1279,7 @@ void HdVP2Mesh::_InitRepr(const TfToken& reprToken, HdDirtyBits* dirtyBits) } // The item is used for bbox display and selection highlight. else if (reprToken == HdVP2ReprTokens->bbox) { - renderItem = _CreateBoundingBoxRenderItem(renderItemName); + renderItem = _CreateBoundingBoxRenderItem(renderItemName, kOpaqueBlue, MSelectionMask::kSelectMeshes, MHWRender::MFrameContext::kExcludeMeshes); drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight); } break; @@ -2619,33 +2617,6 @@ MHWRender::MRenderItem* HdVP2Mesh::_CreateWireframeRenderItem(const MString& nam return renderItem; } -/*! \brief Create render item for bbox repr. - */ -MHWRender::MRenderItem* HdVP2Mesh::_CreateBoundingBoxRenderItem(const MString& name) const -{ - MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create( - name, MHWRender::MRenderItem::DecorationItem, MHWRender::MGeometry::kLines); - - renderItem->setDrawMode(MHWRender::MGeometry::kBoundingBox); - renderItem->castsShadows(false); - renderItem->receivesShadows(false); - renderItem->setShader(_delegate->Get3dSolidShader(kOpaqueBlue)); - renderItem->setSelectionMask(MSelectionMask::kSelectMeshes); -#ifdef MAYA_MRENDERITEM_UFE_IDENTIFIER_SUPPORT - auto* const param = static_cast(_delegate->GetRenderParam()); - ProxyRenderDelegate& drawScene = param->GetDrawScene(); - drawScene.setUfeIdentifiers(*renderItem, _PrimSegmentString); -#endif - -#if MAYA_API_VERSION >= 20220000 - renderItem->setObjectTypeExclusionFlag(MHWRender::MFrameContext::kExcludeMeshes); -#endif - - _SetWantConsolidation(*renderItem, true); - - return renderItem; -} - #ifdef MAYA_NEW_POINT_SNAPPING_SUPPORT MHWRender::MRenderItem* HdVP2Mesh::_CreateShadedSelectedInstancesItem( const MString& name, diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h index 68a7c861a8..3e422da483 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h @@ -172,7 +172,6 @@ class HdVP2Mesh final const HdGeomSubset* geomSubset) const; MHWRender::MRenderItem* _CreateSelectionHighlightRenderItem(const MString& name) const; MHWRender::MRenderItem* _CreateWireframeRenderItem(const MString& name) const; - MHWRender::MRenderItem* _CreateBoundingBoxRenderItem(const MString& name) const; #ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT MHWRender::MRenderItem* _CreatePointsRenderItem(const MString& name) const; From 73689cc2051bab1b1397ce83f1cf281ae0954b6a Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Tue, 8 Feb 2022 11:25:28 -0500 Subject: [PATCH 02/13] Merging function _CreateWireframeRenderItem --- .../render/vp2RenderDelegate/basisCurves.cpp | 39 +------------------ .../render/vp2RenderDelegate/basisCurves.h | 1 - .../vp2RenderDelegate/mayaPrimCommon.cpp | 35 +++++++++++++++++ .../render/vp2RenderDelegate/mayaPrimCommon.h | 1 + lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 37 +----------------- lib/mayaUsd/render/vp2RenderDelegate/mesh.h | 1 - 6 files changed, 39 insertions(+), 75 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index a374ed01fa..64e3e9fd67 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -1429,7 +1429,7 @@ void HdVP2BasisCurves::_InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBit case HdBasisCurvesGeomStyleWire: // The item is used for wireframe display and selection highlight. if (reprToken == HdReprTokens->wire) { - renderItem = _CreateWireRenderItem(renderItemName); + renderItem = _CreateWireframeRenderItem(renderItemName, kOpaqueGray, MSelectionMask::kSelectNurbsCurves, MHWRender::MFrameContext::kExcludeNurbsCurves); drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight); #ifdef HAS_DEFAULT_MATERIAL_SUPPORT_API renderItem->setDefaultMaterialHandling(MRenderItem::SkipWhenDefaultMaterialActive); @@ -1445,7 +1445,7 @@ void HdVP2BasisCurves::_InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBit } #ifdef HAS_DEFAULT_MATERIAL_SUPPORT_API else if (reprToken == HdVP2ReprTokens->defaultMaterial) { - renderItem = _CreateWireRenderItem(renderItemName); + renderItem = _CreateWireframeRenderItem(renderItemName, kOpaqueGray, MSelectionMask::kSelectNurbsCurves, MHWRender::MFrameContext::kExcludeNurbsCurves); renderItem->setDrawMode(MHWRender::MGeometry::kAll); drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight); renderItem->setDefaultMaterialHandling( @@ -1641,41 +1641,6 @@ void HdVP2BasisCurves::_UpdatePrimvarSources( } } -/*! \brief Create render item for wireframe repr. - */ -MHWRender::MRenderItem* HdVP2BasisCurves::_CreateWireRenderItem(const MString& name) const -{ - MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create( - name, MHWRender::MRenderItem::DecorationItem, MHWRender::MGeometry::kLines); - - renderItem->setDrawMode(MHWRender::MGeometry::kWireframe); - renderItem->depthPriority(MHWRender::MRenderItem::sDormantWireDepthPriority); - renderItem->castsShadows(false); - renderItem->receivesShadows(false); - renderItem->setShader(_delegate->Get3dSolidShader(kOpaqueGray)); -#ifdef MAYA_MRENDERITEM_UFE_IDENTIFIER_SUPPORT - auto* const param = static_cast(_delegate->GetRenderParam()); - ProxyRenderDelegate& drawScene = param->GetDrawScene(); - drawScene.setUfeIdentifiers(*renderItem, _PrimSegmentString); -#endif - -#ifdef MAYA_NEW_POINT_SNAPPING_SUPPORT - MSelectionMask selectionMask(MSelectionMask::kSelectNurbsCurves); - selectionMask.addMask(MSelectionMask::kSelectPointsForGravity); - renderItem->setSelectionMask(selectionMask); -#else - renderItem->setSelectionMask(MSelectionMask::kSelectNurbsCurves); -#endif - -#if MAYA_API_VERSION >= 20220000 - renderItem->setObjectTypeExclusionFlag(MHWRender::MFrameContext::kExcludeNurbsCurves); -#endif - - _SetWantConsolidation(*renderItem, true); - - return renderItem; -} - /*! \brief Create render item for smoothHull repr. */ MHWRender::MRenderItem* HdVP2BasisCurves::_CreatePatchRenderItem(const MString& name) const diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h index 32bb5a1d5e..0a6472bc4c 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h @@ -148,7 +148,6 @@ class HdVP2BasisCurves final TfTokenVector const& requiredPrimvars); MHWRender::MRenderItem* _CreatePatchRenderItem(const MString& name) const; - MHWRender::MRenderItem* _CreateWireRenderItem(const MString& name) const; #ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT MHWRender::MRenderItem* _CreatePointsRenderItem(const MString& name) const; diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp index 2084ffc7cc..bc59788e2b 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp @@ -315,4 +315,39 @@ MHWRender::MRenderItem* MayaUsdRPrim::_CreateBoundingBoxRenderItem(const MString return renderItem; } +/*! \brief Create render item for wireframe repr. + */ +MHWRender::MRenderItem* MayaUsdRPrim::_CreateWireframeRenderItem(const MString& name, const MColor& color, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const +{ + MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create( + name, MHWRender::MRenderItem::DecorationItem, MHWRender::MGeometry::kLines); + + renderItem->setDrawMode(MHWRender::MGeometry::kWireframe); + renderItem->depthPriority(MHWRender::MRenderItem::sDormantWireDepthPriority); + renderItem->castsShadows(false); + renderItem->receivesShadows(false); + renderItem->setShader(_delegate->Get3dSolidShader(color)); + +#ifdef MAYA_NEW_POINT_SNAPPING_SUPPORT + MSelectionMask selectionMasks(selectionMask); + selectionMasks.addMask(MSelectionMask::kSelectPointsForGravity); + renderItem->setSelectionMask(selectionMasks); +#else + renderItem->setSelectionMask(selectionMask); +#endif +#ifdef MAYA_MRENDERITEM_UFE_IDENTIFIER_SUPPORT + auto* const param = static_cast(_delegate->GetRenderParam()); + ProxyRenderDelegate& drawScene = param->GetDrawScene(); + drawScene.setUfeIdentifiers(*renderItem, _PrimSegmentString); +#endif + +#if MAYA_API_VERSION >= 20220000 + renderItem->setObjectTypeExclusionFlag(exclusionFlag); +#endif + + _SetWantConsolidation(*renderItem, true); + + return renderItem; +} + PXR_NAMESPACE_CLOSE_SCOPE diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h index 62c81b47ad..2cc9de1ea3 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h @@ -186,6 +186,7 @@ class MayaUsdRPrim //! Helper utility function to adapt Maya API changes. static void _SetWantConsolidation(MHWRender::MRenderItem& renderItem, bool state); + MHWRender::MRenderItem* _CreateWireframeRenderItem(const MString& name, const MColor& color, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const; MHWRender::MRenderItem* _CreateBoundingBoxRenderItem(const MString& name, const MColor& color, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const; //! VP2 render delegate for which this prim was created diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 0ba52e8c9f..8231157a37 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -1274,7 +1274,7 @@ void HdVP2Mesh::_InitRepr(const TfToken& reprToken, HdDirtyBits* dirtyBits) #endif // The item is used for wireframe display and selection highlight. else if (reprToken == HdReprTokens->wire) { - renderItem = _CreateWireframeRenderItem(renderItemName); + renderItem = _CreateWireframeRenderItem(renderItemName, kOpaqueBlue, MSelectionMask::kSelectMeshes, MHWRender::MFrameContext::kExcludeMeshes); drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight); } // The item is used for bbox display and selection highlight. @@ -2582,41 +2582,6 @@ MHWRender::MRenderItem* HdVP2Mesh::_CreatePointsRenderItem(const MString& name) } #endif -/*! \brief Create render item for wireframe repr. - */ -MHWRender::MRenderItem* HdVP2Mesh::_CreateWireframeRenderItem(const MString& name) const -{ - MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create( - name, MHWRender::MRenderItem::DecorationItem, MHWRender::MGeometry::kLines); - - renderItem->setDrawMode(MHWRender::MGeometry::kWireframe); - renderItem->depthPriority(MHWRender::MRenderItem::sDormantWireDepthPriority); - renderItem->castsShadows(false); - renderItem->receivesShadows(false); - renderItem->setShader(_delegate->Get3dSolidShader(kOpaqueBlue)); - -#ifdef MAYA_NEW_POINT_SNAPPING_SUPPORT - MSelectionMask selectionMask(MSelectionMask::kSelectMeshes); - selectionMask.addMask(MSelectionMask::kSelectPointsForGravity); - renderItem->setSelectionMask(selectionMask); -#else - renderItem->setSelectionMask(MSelectionMask::kSelectMeshes); -#endif -#ifdef MAYA_MRENDERITEM_UFE_IDENTIFIER_SUPPORT - auto* const param = static_cast(_delegate->GetRenderParam()); - ProxyRenderDelegate& drawScene = param->GetDrawScene(); - drawScene.setUfeIdentifiers(*renderItem, _PrimSegmentString); -#endif - -#if MAYA_API_VERSION >= 20220000 - renderItem->setObjectTypeExclusionFlag(MHWRender::MFrameContext::kExcludeMeshes); -#endif - - _SetWantConsolidation(*renderItem, true); - - return renderItem; -} - #ifdef MAYA_NEW_POINT_SNAPPING_SUPPORT MHWRender::MRenderItem* HdVP2Mesh::_CreateShadedSelectedInstancesItem( const MString& name, diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h index 3e422da483..5b55b97b18 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h @@ -171,7 +171,6 @@ class HdVP2Mesh final MSubSceneContainer& subSceneContainer, const HdGeomSubset* geomSubset) const; MHWRender::MRenderItem* _CreateSelectionHighlightRenderItem(const MString& name) const; - MHWRender::MRenderItem* _CreateWireframeRenderItem(const MString& name) const; #ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT MHWRender::MRenderItem* _CreatePointsRenderItem(const MString& name) const; From d3bca02d022eda5bd3697011cbf882df3bf28ab0 Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Tue, 8 Feb 2022 16:05:21 -0500 Subject: [PATCH 03/13] Merging method _CreatePointsRenderItem --- .../render/vp2RenderDelegate/basisCurves.cpp | 35 +------------------ .../render/vp2RenderDelegate/basisCurves.h | 4 --- .../vp2RenderDelegate/mayaPrimCommon.cpp | 33 +++++++++++++++++ .../render/vp2RenderDelegate/mayaPrimCommon.h | 4 +++ lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 35 +------------------ lib/mayaUsd/render/vp2RenderDelegate/mesh.h | 4 --- 6 files changed, 39 insertions(+), 76 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index 64e3e9fd67..c5f1929722 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -1455,7 +1455,7 @@ void HdVP2BasisCurves::_InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBit break; #ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT case HdBasisCurvesGeomStylePoints: - renderItem = _CreatePointsRenderItem(renderItemName); + renderItem = _CreatePointsRenderItem(renderItemName, MSelectionMask::kSelectNurbsCurves, MHWRender::MFrameContext::kExcludeNurbsCurves); break; #endif default: TF_WARN("Unsupported geomStyle"); break; @@ -1676,37 +1676,4 @@ MHWRender::MRenderItem* HdVP2BasisCurves::_CreatePatchRenderItem(const MString& return renderItem; } -#ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT -/*! \brief Create render item for points repr. - */ -MHWRender::MRenderItem* HdVP2BasisCurves::_CreatePointsRenderItem(const MString& name) const -{ - MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create( - name, MHWRender::MRenderItem::DecorationItem, MHWRender::MGeometry::kPoints); - - renderItem->setDrawMode(MHWRender::MGeometry::kSelectionOnly); - renderItem->depthPriority(MHWRender::MRenderItem::sDormantPointDepthPriority); - renderItem->castsShadows(false); - renderItem->receivesShadows(false); - renderItem->setShader(_delegate->Get3dFatPointShader()); -#ifdef MAYA_MRENDERITEM_UFE_IDENTIFIER_SUPPORT - auto* const param = static_cast(_delegate->GetRenderParam()); - ProxyRenderDelegate& drawScene = param->GetDrawScene(); - drawScene.setUfeIdentifiers(*renderItem, _PrimSegmentString); -#endif - - MSelectionMask selectionMask(MSelectionMask::kSelectPointsForGravity); - selectionMask.addMask(MSelectionMask::kSelectNurbsCurves); - renderItem->setSelectionMask(selectionMask); - -#if MAYA_API_VERSION >= 20220000 - renderItem->setObjectTypeExclusionFlag(MHWRender::MFrameContext::kExcludeNurbsCurves); -#endif - - _SetWantConsolidation(*renderItem, true); - - return renderItem; -} -#endif - PXR_NAMESPACE_CLOSE_SCOPE diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h index 0a6472bc4c..92d4be8f48 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h @@ -149,10 +149,6 @@ class HdVP2BasisCurves final MHWRender::MRenderItem* _CreatePatchRenderItem(const MString& name) const; -#ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT - MHWRender::MRenderItem* _CreatePointsRenderItem(const MString& name) const; -#endif - enum DirtyBits : HdDirtyBits { DirtySelectionHighlight = MayaUsdRPrim::DirtySelectionHighlight diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp index bc59788e2b..df8eadbc3a 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp @@ -350,4 +350,37 @@ MHWRender::MRenderItem* MayaUsdRPrim::_CreateWireframeRenderItem(const MString& return renderItem; } +#ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT +/*! \brief Create render item for points repr. + */ +MHWRender::MRenderItem* MayaUsdRPrim::_CreatePointsRenderItem(const MString& name, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const +{ + MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create( + name, MHWRender::MRenderItem::DecorationItem, MHWRender::MGeometry::kPoints); + + renderItem->setDrawMode(MHWRender::MGeometry::kSelectionOnly); + renderItem->depthPriority(MHWRender::MRenderItem::sDormantPointDepthPriority); + renderItem->castsShadows(false); + renderItem->receivesShadows(false); + renderItem->setShader(_delegate->Get3dFatPointShader()); + + MSelectionMask selectionMasks(selectionMask); + selectionMasks.addMask(MSelectionMask::kSelectPointsForGravity); + renderItem->setSelectionMask(selectionMasks); +#ifdef MAYA_MRENDERITEM_UFE_IDENTIFIER_SUPPORT + auto* const param = static_cast(_delegate->GetRenderParam()); + ProxyRenderDelegate& drawScene = param->GetDrawScene(); + drawScene.setUfeIdentifiers(*renderItem, _PrimSegmentString); +#endif + +#if MAYA_API_VERSION >= 20220000 + renderItem->setObjectTypeExclusionFlag(exclusionFlag); +#endif + + _SetWantConsolidation(*renderItem, true); + + return renderItem; +} +#endif + PXR_NAMESPACE_CLOSE_SCOPE diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h index dfbbd09928..9981e345a4 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h @@ -189,6 +189,10 @@ class MayaUsdRPrim MHWRender::MRenderItem* _CreateWireframeRenderItem(const MString& name, const MColor& color, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const; MHWRender::MRenderItem* _CreateBoundingBoxRenderItem(const MString& name, const MColor& color, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const; +#ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT + MHWRender::MRenderItem* _CreatePointsRenderItem(const MString& name, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const; +#endif + //! VP2 render delegate for which this prim was created HdVP2RenderDelegate* _delegate { nullptr }; diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 8231157a37..c8ae78c9e2 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -1284,7 +1284,7 @@ void HdVP2Mesh::_InitRepr(const TfToken& reprToken, HdDirtyBits* dirtyBits) } break; #ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT - case HdMeshGeomStylePoints: renderItem = _CreatePointsRenderItem(renderItemName); break; + case HdMeshGeomStylePoints: renderItem = _CreatePointsRenderItem(renderItemName, MSelectionMask::kSelectMeshVerts, MHWRender::MFrameContext::kExcludeMeshes); break; #endif default: TF_WARN("Unsupported geomStyle"); break; } @@ -2549,39 +2549,6 @@ void HdVP2Mesh::_UpdatePrimvarSources( } } -#ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT -/*! \brief Create render item for points repr. - */ -MHWRender::MRenderItem* HdVP2Mesh::_CreatePointsRenderItem(const MString& name) const -{ - MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create( - name, MHWRender::MRenderItem::DecorationItem, MHWRender::MGeometry::kPoints); - - renderItem->setDrawMode(MHWRender::MGeometry::kSelectionOnly); - renderItem->depthPriority(MHWRender::MRenderItem::sDormantPointDepthPriority); - renderItem->castsShadows(false); - renderItem->receivesShadows(false); - renderItem->setShader(_delegate->Get3dFatPointShader()); - - MSelectionMask selectionMask(MSelectionMask::kSelectPointsForGravity); - selectionMask.addMask(MSelectionMask::kSelectMeshVerts); - renderItem->setSelectionMask(selectionMask); -#ifdef MAYA_MRENDERITEM_UFE_IDENTIFIER_SUPPORT - auto* const param = static_cast(_delegate->GetRenderParam()); - ProxyRenderDelegate& drawScene = param->GetDrawScene(); - drawScene.setUfeIdentifiers(*renderItem, _PrimSegmentString); -#endif - -#if MAYA_API_VERSION >= 20220000 - renderItem->setObjectTypeExclusionFlag(MHWRender::MFrameContext::kExcludeMeshes); -#endif - - _SetWantConsolidation(*renderItem, true); - - return renderItem; -} -#endif - #ifdef MAYA_NEW_POINT_SNAPPING_SUPPORT MHWRender::MRenderItem* HdVP2Mesh::_CreateShadedSelectedInstancesItem( const MString& name, diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h index 5b55b97b18..2879f0fcd5 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h @@ -172,10 +172,6 @@ class HdVP2Mesh final const HdGeomSubset* geomSubset) const; MHWRender::MRenderItem* _CreateSelectionHighlightRenderItem(const MString& name) const; -#ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT - MHWRender::MRenderItem* _CreatePointsRenderItem(const MString& name) const; -#endif - static void _InitGPUCompute(); //! Custom dirty bits used by this mesh From 7f3afedb900e24b2fbe1f35a0e872d918217d037 Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Wed, 9 Feb 2022 08:40:02 -0500 Subject: [PATCH 04/13] Maerging method _MakeOtherReprRenderItemsInvisible --- .../render/vp2RenderDelegate/basisCurves.cpp | 35 +----------------- .../render/vp2RenderDelegate/basisCurves.h | 1 - .../vp2RenderDelegate/mayaPrimCommon.cpp | 33 +++++++++++++++++ .../render/vp2RenderDelegate/mayaPrimCommon.h | 2 + lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 37 +------------------ lib/mayaUsd/render/vp2RenderDelegate/mesh.h | 1 - 6 files changed, 37 insertions(+), 72 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index c5f1929722..65ad99781c 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -599,7 +599,7 @@ void HdVP2BasisCurves::Sync( // invisible that we must update every repr, because if we switch reprs while // invisible we'll get no chance to update! if (!_sharedData.visible) - _MakeOtherReprRenderItemsInvisible(delegate, reprToken); + _MakeOtherReprRenderItemsInvisible(reprToken, _reprs); } #if PXR_VERSION > 2111 @@ -1477,39 +1477,6 @@ void HdVP2BasisCurves::_InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBit } } -/*! \brief Hide all of the repr objects for this Rprim except the named repr. - Repr objects are created to support specific reprName tokens, and contain a list of - HdVP2DrawItems and corresponding RenderItems. -*/ -void HdVP2BasisCurves::_MakeOtherReprRenderItemsInvisible( - HdSceneDelegate* sceneDelegate, - const TfToken& reprToken) -{ - for (const std::pair& pair : _reprs) { - if (pair.first != reprToken) { - // For each relevant draw item, update dirty buffer sources. - const HdReprSharedPtr& repr = pair.second; - const auto& items = repr->GetDrawItems(); - -#if HD_API_VERSION < 35 - for (HdDrawItem* item : items) { - if (HdVP2DrawItem* drawItem = static_cast(item)) { -#else - for (const HdRepr::DrawItemUniquePtr& item : items) { - if (HdVP2DrawItem* const drawItem = static_cast(item.get())) { -#endif - for (auto& renderItemData : drawItem->GetRenderItems()) { - _delegate->GetVP2ResourceRegistry().EnqueueCommit([&renderItemData]() { - renderItemData._enabled = false; - renderItemData._renderItem->enable(false); - }); - } - } - } - } - } -} - /*! \brief Update the named repr object for this Rprim. Repr objects are created to support specific reprName tokens, and contain a list of diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h index 92d4be8f48..3966a66a93 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h @@ -133,7 +133,6 @@ class HdVP2BasisCurves final private: void _UpdateRepr(HdSceneDelegate* sceneDelegate, TfToken const& reprToken); - void _MakeOtherReprRenderItemsInvisible(HdSceneDelegate*, const TfToken&); void _UpdateDrawItem( HdSceneDelegate* sceneDelegate, diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp index df8eadbc3a..21e2a05fc0 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp @@ -383,4 +383,37 @@ MHWRender::MRenderItem* MayaUsdRPrim::_CreatePointsRenderItem(const MString& nam } #endif +/*! \brief Hide all of the repr objects for this Rprim except the named repr. + Repr objects are created to support specific reprName tokens, and contain a list of + HdVP2DrawItems and corresponding RenderItems. +*/ +void MayaUsdRPrim::_MakeOtherReprRenderItemsInvisible( + const TfToken& reprToken, + const ReprVector& reprs) +{ + for (const std::pair& pair : reprs) { + if (pair.first != reprToken) { + // For each relevant draw item, update dirty buffer sources. + const HdReprSharedPtr& repr = pair.second; + const auto& items = repr->GetDrawItems(); + +#if HD_API_VERSION < 35 + for (HdDrawItem* item : items) { + if (HdVP2DrawItem* drawItem = static_cast(item)) { +#else + for (const HdRepr::DrawItemUniquePtr& item : items) { + if (HdVP2DrawItem* const drawItem = static_cast(item.get())) { +#endif + for (auto& renderItemData : drawItem->GetRenderItems()) { + _delegate->GetVP2ResourceRegistry().EnqueueCommit([&renderItemData]() { + renderItemData._enabled = false; + renderItemData._renderItem->enable(false); + }); + } + } + } + } + } +} + PXR_NAMESPACE_CLOSE_SCOPE diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h index 9981e345a4..b40cc771d7 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h @@ -183,6 +183,8 @@ class MayaUsdRPrim void _PropagateDirtyBitsCommon(HdDirtyBits& bits, const ReprVector& reprs) const; + void _MakeOtherReprRenderItemsInvisible(const TfToken&, const ReprVector&); + //! Helper utility function to adapt Maya API changes. static void _SetWantConsolidation(MHWRender::MRenderItem& renderItem, bool state); diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index c8ae78c9e2..68e67081bf 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -1032,7 +1032,7 @@ void HdVP2Mesh::Sync( // invisible that we must update every repr, because if we switch reprs while // invisible we'll get no chance to update! if (!_sharedData.visible) - _MakeOtherReprRenderItemsInvisible(delegate, reprToken); + _MakeOtherReprRenderItemsInvisible(reprToken, _reprs); } #if PXR_VERSION > 2111 @@ -1411,41 +1411,6 @@ void HdVP2Mesh::_CreateSmoothHullRenderItems( TF_VERIFY(numFacesWithoutRenderItem == 0); } -/*! \brief Hide all of the repr objects for this Rprim except the named repr. - - Repr objects are created to support specific reprName tokens, and contain a list of - HdVP2DrawItems and corresponding RenderItems. -*/ -void HdVP2Mesh::_MakeOtherReprRenderItemsInvisible( - HdSceneDelegate* sceneDelegate, - const TfToken& reprToken) -{ - for (const std::pair& pair : _reprs) { - if (pair.first != reprToken) { - // For each relevant draw item, update dirty buffer sources. - _MeshReprConfig::DescArray reprDescs = _GetReprDesc(pair.first); - int drawItemIndex = 0; - for (size_t descIdx = 0; descIdx < reprDescs.size(); ++descIdx, drawItemIndex++) { - const HdMeshReprDesc& desc = reprDescs[descIdx]; - if (desc.geomStyle == HdMeshGeomStyleInvalid) { - continue; - } - auto* drawItem - = static_cast(pair.second->GetDrawItem(drawItemIndex)); - if (!drawItem) - continue; - - for (auto& renderItemData : drawItem->GetRenderItems()) { - _delegate->GetVP2ResourceRegistry().EnqueueCommit([&renderItemData]() { - renderItemData._enabled = false; - renderItemData._renderItem->enable(false); - }); - } - } - } - } -} - /*! \brief Update the named repr object for this Rprim. Repr objects are created to support specific reprName tokens, and contain a list of diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h index 2879f0fcd5..1fb05da20c 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h @@ -125,7 +125,6 @@ class HdVP2Mesh final void _InitRepr(const TfToken&, HdDirtyBits*) override; void _UpdateRepr(HdSceneDelegate*, const TfToken&); - void _MakeOtherReprRenderItemsInvisible(HdSceneDelegate*, const TfToken&); bool _PrimvarIsRequired(const TfToken&) const; From 8c04c897ad3ab547a0346b9f924e3f4272730cb1 Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Wed, 9 Feb 2022 09:01:56 -0500 Subject: [PATCH 05/13] Refactoring the pass over draw items in the methods _HideAllDrawItems to prepare it for merging --- .../render/vp2RenderDelegate/basisCurves.cpp | 30 ++++++++----------- lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 30 ++++++++----------- 2 files changed, 26 insertions(+), 34 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index 65ad99781c..f02203e270 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -1530,24 +1530,20 @@ void HdVP2BasisCurves::_HideAllDrawItems(const TfToken& reprToken) return; } - _BasisCurvesReprConfig::DescArray reprDescs = _GetReprDesc(reprToken); + const auto& items = curRepr->GetDrawItems(); - // For each relevant draw item, update dirty buffer sources. - int drawItemIndex = 0; - for (size_t descIdx = 0; descIdx < reprDescs.size(); ++descIdx) { - const HdBasisCurvesReprDesc& desc = reprDescs[descIdx]; - if (desc.geomStyle == HdBasisCurvesGeomStyleInvalid) { - continue; - } - - auto* drawItem = static_cast(curRepr->GetDrawItem(drawItemIndex++)); - if (!drawItem) - continue; - - for (auto& renderItemData : drawItem->GetRenderItems()) { - renderItemData._enabled = false; - _delegate->GetVP2ResourceRegistry().EnqueueCommit( - [&]() { renderItemData._renderItem->enable(false); }); +#if HD_API_VERSION < 35 + for (HdDrawItem* item : items) { + if (HdVP2DrawItem* drawItem = static_cast(item)) { +#else + for (const HdRepr::DrawItemUniquePtr& item : items) { + if (HdVP2DrawItem* const drawItem = static_cast(item.get())) { +#endif + for (auto& renderItemData : drawItem->GetRenderItems()) { + renderItemData._enabled = false; + _delegate->GetVP2ResourceRegistry().EnqueueCommit( + [&]() { renderItemData._renderItem->enable(false); }); + } } } } diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 68e67081bf..10b8334d00 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -2191,24 +2191,20 @@ void HdVP2Mesh::_HideAllDrawItems(const TfToken& reprToken) return; } - _MeshReprConfig::DescArray reprDescs = _GetReprDesc(reprToken); + const auto& items = curRepr->GetDrawItems(); - // For each relevant draw item, update dirty buffer sources. - int drawItemIndex = 0; - for (size_t descIdx = 0; descIdx < reprDescs.size(); ++descIdx) { - const HdMeshReprDesc& desc = reprDescs[descIdx]; - if (desc.geomStyle == HdMeshGeomStyleInvalid) { - continue; - } - - auto* drawItem = static_cast(curRepr->GetDrawItem(drawItemIndex++)); - if (!drawItem) - continue; - - for (auto& renderItemData : drawItem->GetRenderItems()) { - renderItemData._enabled = false; - _delegate->GetVP2ResourceRegistry().EnqueueCommit( - [&]() { renderItemData._renderItem->enable(false); }); +#if HD_API_VERSION < 35 + for (HdDrawItem* item : items) { + if (HdVP2DrawItem* drawItem = static_cast(item)) { +#else + for (const HdRepr::DrawItemUniquePtr& item : items) { + if (HdVP2DrawItem* const drawItem = static_cast(item.get())) { +#endif + for (auto& renderItemData : drawItem->GetRenderItems()) { + renderItemData._enabled = false; + _delegate->GetVP2ResourceRegistry().EnqueueCommit( + [&]() { renderItemData._renderItem->enable(false); }); + } } } } From 3f10dff8d5607a11ba5de135bc0c1eff443083fe Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Wed, 9 Feb 2022 09:06:34 -0500 Subject: [PATCH 06/13] Merging methods _HideAllDrawItems --- .../render/vp2RenderDelegate/basisCurves.cpp | 27 +------------------ .../render/vp2RenderDelegate/basisCurves.h | 2 -- .../vp2RenderDelegate/mayaPrimCommon.cpp | 24 +++++++++++++++++ .../render/vp2RenderDelegate/mayaPrimCommon.h | 2 ++ lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 27 +------------------ lib/mayaUsd/render/vp2RenderDelegate/mesh.h | 2 -- 6 files changed, 28 insertions(+), 56 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index f02203e270..7c001c54f1 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -464,7 +464,7 @@ void HdVP2BasisCurves::Sync( ProxyRenderDelegate& drawScene = param->GetDrawScene(); HdRenderIndex& renderIndex = delegate->GetRenderIndex(); if (!drawScene.DrawRenderTag(renderIndex.GetRenderTag(GetId()))) { - _HideAllDrawItems(reprToken); + _HideAllDrawItems(_GetRepr(reprToken)); *dirtyBits &= ~( HdChangeTracker::DirtyRenderTag #ifdef ENABLE_RENDERTAG_VISIBILITY_WORKAROUND @@ -1523,31 +1523,6 @@ HdDirtyBits HdVP2BasisCurves::GetInitialDirtyBitsMask() const return bits; } -void HdVP2BasisCurves::_HideAllDrawItems(const TfToken& reprToken) -{ - HdReprSharedPtr const& curRepr = _GetRepr(reprToken); - if (!curRepr) { - return; - } - - const auto& items = curRepr->GetDrawItems(); - -#if HD_API_VERSION < 35 - for (HdDrawItem* item : items) { - if (HdVP2DrawItem* drawItem = static_cast(item)) { -#else - for (const HdRepr::DrawItemUniquePtr& item : items) { - if (HdVP2DrawItem* const drawItem = static_cast(item.get())) { -#endif - for (auto& renderItemData : drawItem->GetRenderItems()) { - renderItemData._enabled = false; - _delegate->GetVP2ResourceRegistry().EnqueueCommit( - [&]() { renderItemData._renderItem->enable(false); }); - } - } - } -} - /*! \brief Update _primvarSourceMap, our local cache of raw primvar data. This function pulls data from the scene delegate, but defers processing. diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h index 3966a66a93..a49b81a687 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h @@ -139,8 +139,6 @@ class HdVP2BasisCurves final HdVP2DrawItem* drawItem, HdBasisCurvesReprDesc const& desc); - void _HideAllDrawItems(const TfToken& reprToken); - void _UpdatePrimvarSources( HdSceneDelegate* sceneDelegate, HdDirtyBits dirtyBits, diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp index 21e2a05fc0..8907f46e11 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp @@ -416,4 +416,28 @@ void MayaUsdRPrim::_MakeOtherReprRenderItemsInvisible( } } +void MayaUsdRPrim::_HideAllDrawItems(HdReprSharedPtr const& curRepr) +{ + if (!curRepr) { + return; + } + + const auto& items = curRepr->GetDrawItems(); + +#if HD_API_VERSION < 35 + for (HdDrawItem* item : items) { + if (HdVP2DrawItem* drawItem = static_cast(item)) { +#else + for (const HdRepr::DrawItemUniquePtr& item : items) { + if (HdVP2DrawItem* const drawItem = static_cast(item.get())) { +#endif + for (auto& renderItemData : drawItem->GetRenderItems()) { + renderItemData._enabled = false; + _delegate->GetVP2ResourceRegistry().EnqueueCommit( + [&]() { renderItemData._renderItem->enable(false); }); + } + } + } +} + PXR_NAMESPACE_CLOSE_SCOPE diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h index b40cc771d7..16d6793a4f 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h @@ -185,6 +185,8 @@ class MayaUsdRPrim void _MakeOtherReprRenderItemsInvisible(const TfToken&, const ReprVector&); + void _HideAllDrawItems(HdReprSharedPtr const& curRepr); + //! Helper utility function to adapt Maya API changes. static void _SetWantConsolidation(MHWRender::MRenderItem& renderItem, bool state); diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 10b8334d00..4d545f4027 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -771,7 +771,7 @@ void HdVP2Mesh::Sync( // existing render items because they should not be drawn. HdRenderIndex& renderIndex = delegate->GetRenderIndex(); if (!drawScene.DrawRenderTag(renderIndex.GetRenderTag(id))) { - _HideAllDrawItems(reprToken); + _HideAllDrawItems(_GetRepr(reprToken)); *dirtyBits &= ~( HdChangeTracker::DirtyRenderTag #ifdef ENABLE_RENDERTAG_VISIBILITY_WORKAROUND @@ -2184,31 +2184,6 @@ void HdVP2Mesh::_UpdateDrawItem( renderItemData.ResetDirtyBits(); } -void HdVP2Mesh::_HideAllDrawItems(const TfToken& reprToken) -{ - HdReprSharedPtr const& curRepr = _GetRepr(reprToken); - if (!curRepr) { - return; - } - - const auto& items = curRepr->GetDrawItems(); - -#if HD_API_VERSION < 35 - for (HdDrawItem* item : items) { - if (HdVP2DrawItem* drawItem = static_cast(item)) { -#else - for (const HdRepr::DrawItemUniquePtr& item : items) { - if (HdVP2DrawItem* const drawItem = static_cast(item.get())) { -#endif - for (auto& renderItemData : drawItem->GetRenderItems()) { - renderItemData._enabled = false; - _delegate->GetVP2ResourceRegistry().EnqueueCommit( - [&]() { renderItemData._renderItem->enable(false); }); - } - } - } -} - #ifdef HDVP2_ENABLE_GPU_COMPUTE /*! \brief Save topology information for later GPGPU evaluation diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h index 1fb05da20c..274e2189bc 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h @@ -142,8 +142,6 @@ class HdVP2Mesh final const HdMeshReprDesc& desc, const TfToken& reprToken); - void _HideAllDrawItems(const TfToken& reprToken); - void _UpdatePrimvarSources( HdSceneDelegate* sceneDelegate, HdDirtyBits dirtyBits, From 72bf119e6c32ae13fa1c994b3f3b6c98f71d829c Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Wed, 9 Feb 2022 09:43:17 -0500 Subject: [PATCH 07/13] Introducing virtual function _RenderTag in preparation for further refactoring --- lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp | 4 ++-- lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h | 2 ++ lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h | 2 ++ lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 4 ++-- lib/mayaUsd/render/vp2RenderDelegate/mesh.h | 2 ++ 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index 7c001c54f1..b378b929f1 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -606,7 +606,7 @@ void HdVP2BasisCurves::Sync( // Hydra now manages and caches render tags under the hood and is clearing // the dirty bit prior to calling sync. Unconditionally set the render tag // in the shared data structure based on current Hydra data - _curvesSharedData._renderTag = GetRenderTag(); + _RenderTag() = GetRenderTag(); #else if (*dirtyBits & (HdChangeTracker::DirtyRenderTag @@ -614,7 +614,7 @@ void HdVP2BasisCurves::Sync( | HdChangeTracker::DirtyVisibility #endif )) { - _curvesSharedData._renderTag = delegate->GetRenderTag(id); + _RenderTag() = delegate->GetRenderTag(id); } #endif diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h index a49b81a687..c9153f7cbb 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.h @@ -131,6 +131,8 @@ class HdVP2BasisCurves final void _InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBits) override; + TfToken& _RenderTag() override { return _curvesSharedData._renderTag; } + private: void _UpdateRepr(HdSceneDelegate* sceneDelegate, TfToken const& reprToken); diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h index 16d6793a4f..50e7d12cf9 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h @@ -197,6 +197,8 @@ class MayaUsdRPrim MHWRender::MRenderItem* _CreatePointsRenderItem(const MString& name, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const; #endif + virtual TfToken& _RenderTag() = 0; + //! VP2 render delegate for which this prim was created HdVP2RenderDelegate* _delegate { nullptr }; diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 4d545f4027..dd33a9e96a 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -1039,7 +1039,7 @@ void HdVP2Mesh::Sync( // Hydra now manages and caches render tags under the hood and is clearing // the dirty bit prior to calling sync. Unconditionally set the render tag // in the shared data structure based on current Hydra data - _meshSharedData->_renderTag = GetRenderTag(); + _RenderTag() = GetRenderTag(); #else if (*dirtyBits & (HdChangeTracker::DirtyRenderTag @@ -1047,7 +1047,7 @@ void HdVP2Mesh::Sync( | HdChangeTracker::DirtyVisibility #endif )) { - _meshSharedData->_renderTag = delegate->GetRenderTag(id); + _RenderTag() = delegate->GetRenderTag(id); } #endif diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h index 274e2189bc..36667ee309 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.h @@ -135,6 +135,8 @@ class HdVP2Mesh final void _CreateOSDTables(); #endif + TfToken& _RenderTag() override { return _meshSharedData->_renderTag; } + void _UpdateDrawItem( HdSceneDelegate*, HdVP2DrawItem*, From 18e2cdebcda15a2a2276e316740ab24b445e97c2 Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Wed, 9 Feb 2022 09:53:10 -0500 Subject: [PATCH 08/13] Adding new method _SyncSharedData and merging the appropriate code in there --- .../render/vp2RenderDelegate/basisCurves.cpp | 35 +---------------- .../vp2RenderDelegate/mayaPrimCommon.cpp | 38 +++++++++++++++++++ .../render/vp2RenderDelegate/mayaPrimCommon.h | 2 + lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 35 +---------------- 4 files changed, 42 insertions(+), 68 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index b378b929f1..ba00314139 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -583,40 +583,7 @@ void HdVP2BasisCurves::Sync( } } - if (HdChangeTracker::IsExtentDirty(*dirtyBits, id)) { - _sharedData.bounds.SetRange(delegate->GetExtent(id)); - } - - if (HdChangeTracker::IsTransformDirty(*dirtyBits, id)) { - _sharedData.bounds.SetMatrix(delegate->GetTransform(id)); - } - - if (HdChangeTracker::IsVisibilityDirty(*dirtyBits, id)) { - _sharedData.visible = delegate->GetVisible(id); - - // Invisible rprims don't get calls to Sync or _PropagateDirtyBits while - // they are invisible. This means that when a prim goes from visible to - // invisible that we must update every repr, because if we switch reprs while - // invisible we'll get no chance to update! - if (!_sharedData.visible) - _MakeOtherReprRenderItemsInvisible(reprToken, _reprs); - } - -#if PXR_VERSION > 2111 - // Hydra now manages and caches render tags under the hood and is clearing - // the dirty bit prior to calling sync. Unconditionally set the render tag - // in the shared data structure based on current Hydra data - _RenderTag() = GetRenderTag(); -#else - if (*dirtyBits - & (HdChangeTracker::DirtyRenderTag -#ifdef ENABLE_RENDERTAG_VISIBILITY_WORKAROUND - | HdChangeTracker::DirtyVisibility -#endif - )) { - _RenderTag() = delegate->GetRenderTag(id); - } -#endif + _SyncSharedData(_sharedData, delegate, dirtyBits, reprToken, id, _reprs); *dirtyBits = HdChangeTracker::Clean; diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp index 8907f46e11..83b05fe731 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp @@ -440,4 +440,42 @@ void MayaUsdRPrim::_HideAllDrawItems(HdReprSharedPtr const& curRepr) } } +void MayaUsdRPrim::_SyncSharedData(HdRprimSharedData& sharedData, HdSceneDelegate* delegate, HdDirtyBits const* dirtyBits, TfToken const& reprToken, SdfPath const& id, ReprVector const& reprs) +{ + if (HdChangeTracker::IsExtentDirty(*dirtyBits, id)) { + sharedData.bounds.SetRange(delegate->GetExtent(id)); + } + + if (HdChangeTracker::IsTransformDirty(*dirtyBits, id)) { + sharedData.bounds.SetMatrix(delegate->GetTransform(id)); + } + + if (HdChangeTracker::IsVisibilityDirty(*dirtyBits, id)) { + sharedData.visible = delegate->GetVisible(id); + + // Invisible rprims don't get calls to Sync or _PropagateDirtyBits while + // they are invisible. This means that when a prim goes from visible to + // invisible that we must update every repr, because if we switch reprs while + // invisible we'll get no chance to update! + if (!sharedData.visible) + _MakeOtherReprRenderItemsInvisible(reprToken, reprs); + } + +#if PXR_VERSION > 2111 + // Hydra now manages and caches render tags under the hood and is clearing + // the dirty bit prior to calling sync. Unconditionally set the render tag + // in the shared data structure based on current Hydra data + _RenderTag() = GetRenderTag(); +#else + if (*dirtyBits + & (HdChangeTracker::DirtyRenderTag +#ifdef ENABLE_RENDERTAG_VISIBILITY_WORKAROUND + | HdChangeTracker::DirtyVisibility +#endif + )) { + _RenderTag() = delegate->GetRenderTag(id); + } +#endif +} + PXR_NAMESPACE_CLOSE_SCOPE diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h index 50e7d12cf9..d1d7cf959f 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h @@ -181,6 +181,8 @@ class MayaUsdRPrim void _SetDirtyRepr(const HdReprSharedPtr& repr); + void _SyncSharedData(HdRprimSharedData& sharedData, HdSceneDelegate* delegate, HdDirtyBits const* dirtyBits, TfToken const& reprToken, SdfPath const& id, ReprVector const& reprs); + void _PropagateDirtyBitsCommon(HdDirtyBits& bits, const ReprVector& reprs) const; void _MakeOtherReprRenderItemsInvisible(const TfToken&, const ReprVector&); diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index dd33a9e96a..5b8b2a6c3c 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -1016,40 +1016,7 @@ void HdVP2Mesh::Sync( _PrepareSharedVertexBuffers(delegate, *dirtyBits, reprToken); - if (HdChangeTracker::IsExtentDirty(*dirtyBits, id)) { - _sharedData.bounds.SetRange(delegate->GetExtent(id)); - } - - if (HdChangeTracker::IsTransformDirty(*dirtyBits, id)) { - _sharedData.bounds.SetMatrix(delegate->GetTransform(id)); - } - - if (HdChangeTracker::IsVisibilityDirty(*dirtyBits, id)) { - _sharedData.visible = delegate->GetVisible(id); - - // Invisible rprims don't get calls to Sync or _PropagateDirtyBits while - // they are invisible. This means that when a prim goes from visible to - // invisible that we must update every repr, because if we switch reprs while - // invisible we'll get no chance to update! - if (!_sharedData.visible) - _MakeOtherReprRenderItemsInvisible(reprToken, _reprs); - } - -#if PXR_VERSION > 2111 - // Hydra now manages and caches render tags under the hood and is clearing - // the dirty bit prior to calling sync. Unconditionally set the render tag - // in the shared data structure based on current Hydra data - _RenderTag() = GetRenderTag(); -#else - if (*dirtyBits - & (HdChangeTracker::DirtyRenderTag -#ifdef ENABLE_RENDERTAG_VISIBILITY_WORKAROUND - | HdChangeTracker::DirtyVisibility -#endif - )) { - _RenderTag() = delegate->GetRenderTag(id); - } -#endif + _SyncSharedData(_sharedData, delegate, dirtyBits, reprToken, id, _reprs); *dirtyBits = HdChangeTracker::Clean; From b39e3101d918e357773d633cc615f8cde5651586 Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Wed, 9 Feb 2022 10:22:17 -0500 Subject: [PATCH 09/13] Moving some code inside of Sync methods to prepare for further merging --- .../render/vp2RenderDelegate/basisCurves.cpp | 10 +++++----- lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index ba00314139..8cf405e0ed 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -457,13 +457,15 @@ void HdVP2BasisCurves::Sync( HdDirtyBits* dirtyBits, TfToken const& reprToken) { + const SdfPath& id = GetId(); + auto* const param = static_cast(_delegate->GetRenderParam()); + ProxyRenderDelegate& drawScene = param->GetDrawScene(); + // We don't update the repr if it is hidden by the render tags (purpose) // of the ProxyRenderDelegate. In additional, we need to hide any already // existing render items because they should not be drawn. - auto* const param = static_cast(_delegate->GetRenderParam()); - ProxyRenderDelegate& drawScene = param->GetDrawScene(); HdRenderIndex& renderIndex = delegate->GetRenderIndex(); - if (!drawScene.DrawRenderTag(renderIndex.GetRenderTag(GetId()))) { + if (!drawScene.DrawRenderTag(renderIndex.GetRenderTag(id))) { _HideAllDrawItems(_GetRepr(reprToken)); *dirtyBits &= ~( HdChangeTracker::DirtyRenderTag @@ -480,8 +482,6 @@ void HdVP2BasisCurves::Sync( _rprimId.asChar(), "HdVP2BasisCurves::Sync"); - const SdfPath& id = GetId(); - // Update the selection status if it changed. if (*dirtyBits & DirtySelectionHighlight) { _selectionStatus = drawScene.GetSelectionStatus(id); diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 5b8b2a6c3c..d72dc0761b 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -752,19 +752,11 @@ void HdVP2Mesh::Sync( HdSceneDelegate* delegate, HdRenderParam* renderParam, HdDirtyBits* dirtyBits, - const TfToken& reprToken) + TfToken const& reprToken) { const SdfPath& id = GetId(); auto* const param = static_cast(_delegate->GetRenderParam()); ProxyRenderDelegate& drawScene = param->GetDrawScene(); - UsdImagingDelegate* usdImagingDelegate = drawScene.GetUsdImagingDelegate(); - - // Update the selection status if it changed. - if (*dirtyBits & DirtySelectionHighlight) { - _selectionStatus = drawScene.GetSelectionStatus(id); - } else { - TF_VERIFY(_selectionStatus == drawScene.GetSelectionStatus(id)); - } // We don't update the repr if it is hidden by the render tags (purpose) // of the ProxyRenderDelegate. In additional, we need to hide any already @@ -787,6 +779,8 @@ void HdVP2Mesh::Sync( _rprimId.asChar(), "HdVP2Mesh::Sync"); + UsdImagingDelegate* usdImagingDelegate = drawScene.GetUsdImagingDelegate(); + // Geom subsets are accessed through the mesh topology. I need to know about // the additional materialIds that get bound by geom subsets before we build the // _primvaInfo. So the very first thing I need to do is grab the topology. @@ -833,6 +827,13 @@ void HdVP2Mesh::Sync( #endif } + // Update the selection status if it changed. + if (*dirtyBits & DirtySelectionHighlight) { + _selectionStatus = drawScene.GetSelectionStatus(id); + } else { + TF_VERIFY(_selectionStatus == drawScene.GetSelectionStatus(id)); + } + if (*dirtyBits & HdChangeTracker::DirtyMaterialId) { const SdfPath materialId = delegate->GetMaterialId(id); From 4676549b087426463076de0ce62f4ea7a97d40f8 Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Wed, 9 Feb 2022 11:12:20 -0500 Subject: [PATCH 10/13] Adding new method _SyncCommon and move appropriate code in there --- .../render/vp2RenderDelegate/basisCurves.cpp | 24 ++------------- .../vp2RenderDelegate/mayaPrimCommon.cpp | 29 +++++++++++++++++++ .../render/vp2RenderDelegate/mayaPrimCommon.h | 2 ++ lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 28 ++++-------------- 4 files changed, 38 insertions(+), 45 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index 8cf405e0ed..d34f1dd73b 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -458,21 +458,8 @@ void HdVP2BasisCurves::Sync( TfToken const& reprToken) { const SdfPath& id = GetId(); - auto* const param = static_cast(_delegate->GetRenderParam()); - ProxyRenderDelegate& drawScene = param->GetDrawScene(); - - // We don't update the repr if it is hidden by the render tags (purpose) - // of the ProxyRenderDelegate. In additional, we need to hide any already - // existing render items because they should not be drawn. - HdRenderIndex& renderIndex = delegate->GetRenderIndex(); - if (!drawScene.DrawRenderTag(renderIndex.GetRenderTag(id))) { - _HideAllDrawItems(_GetRepr(reprToken)); - *dirtyBits &= ~( - HdChangeTracker::DirtyRenderTag -#ifdef ENABLE_RENDERTAG_VISIBILITY_WORKAROUND - | HdChangeTracker::DirtyVisibility -#endif - ); + HdRenderIndex& renderIndex = delegate->GetRenderIndex(); + if (!_SyncCommon(dirtyBits, id, _GetRepr(reprToken), renderIndex)) { return; } @@ -482,13 +469,6 @@ void HdVP2BasisCurves::Sync( _rprimId.asChar(), "HdVP2BasisCurves::Sync"); - // Update the selection status if it changed. - if (*dirtyBits & DirtySelectionHighlight) { - _selectionStatus = drawScene.GetSelectionStatus(id); - } else { - TF_VERIFY(_selectionStatus == drawScene.GetSelectionStatus(id)); - } - if (*dirtyBits & HdChangeTracker::DirtyMaterialId) { const SdfPath materialId = delegate->GetMaterialId(id); diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp index 83b05fe731..8b5562a0dd 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp @@ -478,4 +478,33 @@ void MayaUsdRPrim::_SyncSharedData(HdRprimSharedData& sharedData, HdSceneDelegat #endif } +bool MayaUsdRPrim::_SyncCommon(HdDirtyBits* dirtyBits, const SdfPath& id, HdReprSharedPtr const& curRepr, HdRenderIndex& renderIndex) +{ + auto* const param = static_cast(_delegate->GetRenderParam()); + ProxyRenderDelegate& drawScene = param->GetDrawScene(); + + // Update the selection status if it changed. + if (*dirtyBits & DirtySelectionHighlight) { + _selectionStatus = drawScene.GetSelectionStatus(id); + } else { + TF_VERIFY(_selectionStatus == drawScene.GetSelectionStatus(id)); + } + + // We don't update the repr if it is hidden by the render tags (purpose) + // of the ProxyRenderDelegate. In additional, we need to hide any already + // existing render items because they should not be drawn. + if (!drawScene.DrawRenderTag(renderIndex.GetRenderTag(id))) { + _HideAllDrawItems(curRepr); + *dirtyBits &= ~( + HdChangeTracker::DirtyRenderTag +#ifdef ENABLE_RENDERTAG_VISIBILITY_WORKAROUND + | HdChangeTracker::DirtyVisibility +#endif + ); + return false; + } + + return true; +} + PXR_NAMESPACE_CLOSE_SCOPE diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h index d1d7cf959f..e05aff8a56 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h @@ -181,6 +181,8 @@ class MayaUsdRPrim void _SetDirtyRepr(const HdReprSharedPtr& repr); + bool _SyncCommon(HdDirtyBits* dirtyBits, const SdfPath& id, HdReprSharedPtr const& curRepr, HdRenderIndex& renderIndex); + void _SyncSharedData(HdRprimSharedData& sharedData, HdSceneDelegate* delegate, HdDirtyBits const* dirtyBits, TfToken const& reprToken, SdfPath const& id, ReprVector const& reprs); void _PropagateDirtyBitsCommon(HdDirtyBits& bits, const ReprVector& reprs) const; diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index d72dc0761b..28c35bd788 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -754,22 +754,9 @@ void HdVP2Mesh::Sync( HdDirtyBits* dirtyBits, TfToken const& reprToken) { - const SdfPath& id = GetId(); - auto* const param = static_cast(_delegate->GetRenderParam()); - ProxyRenderDelegate& drawScene = param->GetDrawScene(); - - // We don't update the repr if it is hidden by the render tags (purpose) - // of the ProxyRenderDelegate. In additional, we need to hide any already - // existing render items because they should not be drawn. + const SdfPath& id = GetId(); HdRenderIndex& renderIndex = delegate->GetRenderIndex(); - if (!drawScene.DrawRenderTag(renderIndex.GetRenderTag(id))) { - _HideAllDrawItems(_GetRepr(reprToken)); - *dirtyBits &= ~( - HdChangeTracker::DirtyRenderTag -#ifdef ENABLE_RENDERTAG_VISIBILITY_WORKAROUND - | HdChangeTracker::DirtyVisibility -#endif - ); + if (!_SyncCommon(dirtyBits, id, _GetRepr(reprToken), renderIndex)) { return; } @@ -779,8 +766,10 @@ void HdVP2Mesh::Sync( _rprimId.asChar(), "HdVP2Mesh::Sync"); + auto* const param = static_cast(_delegate->GetRenderParam()); + ProxyRenderDelegate& drawScene = param->GetDrawScene(); UsdImagingDelegate* usdImagingDelegate = drawScene.GetUsdImagingDelegate(); - + // Geom subsets are accessed through the mesh topology. I need to know about // the additional materialIds that get bound by geom subsets before we build the // _primvaInfo. So the very first thing I need to do is grab the topology. @@ -827,13 +816,6 @@ void HdVP2Mesh::Sync( #endif } - // Update the selection status if it changed. - if (*dirtyBits & DirtySelectionHighlight) { - _selectionStatus = drawScene.GetSelectionStatus(id); - } else { - TF_VERIFY(_selectionStatus == drawScene.GetSelectionStatus(id)); - } - if (*dirtyBits & HdChangeTracker::DirtyMaterialId) { const SdfPath materialId = delegate->GetMaterialId(id); From 4403aea6197a7abdc437895d076a5f0d0c96286e Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Wed, 9 Feb 2022 12:17:15 -0500 Subject: [PATCH 11/13] Merging code into new method _GetUpdatedMaterialId --- .../render/vp2RenderDelegate/basisCurves.cpp | 24 +------------- .../vp2RenderDelegate/mayaPrimCommon.cpp | 32 +++++++++++++++++++ .../render/vp2RenderDelegate/mayaPrimCommon.h | 2 ++ lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 24 +------------- 4 files changed, 36 insertions(+), 46 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index d34f1dd73b..2af8f46425 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -470,29 +470,7 @@ void HdVP2BasisCurves::Sync( "HdVP2BasisCurves::Sync"); if (*dirtyBits & HdChangeTracker::DirtyMaterialId) { - const SdfPath materialId = delegate->GetMaterialId(id); - -#ifdef HDVP2_MATERIAL_CONSOLIDATION_UPDATE_WORKAROUND - const SdfPath& origMaterialId = GetMaterialId(); - if (materialId != origMaterialId) { - if (!origMaterialId.IsEmpty()) { - HdVP2Material* material = static_cast( - renderIndex.GetSprim(HdPrimTypeTokens->material, origMaterialId)); - if (material) { - material->UnsubscribeFromMaterialUpdates(id); - } - } - - if (!materialId.IsEmpty()) { - HdVP2Material* material = static_cast( - renderIndex.GetSprim(HdPrimTypeTokens->material, materialId)); - if (material) { - material->SubscribeForMaterialUpdates(id); - } - } - } -#endif - + const SdfPath materialId = _GetUpdatedMaterialId(this, delegate); #if HD_API_VERSION < 37 _SetMaterialId(renderIndex.GetChangeTracker(), materialId); #else diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp index 8b5562a0dd..0fc73a0114 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp @@ -17,6 +17,7 @@ #include "mayaPrimCommon.h" #include "bboxGeom.h" +#include "material.h" #include "render_delegate.h" #include @@ -507,4 +508,35 @@ bool MayaUsdRPrim::_SyncCommon(HdDirtyBits* dirtyBits, const SdfPath& id, HdRepr return true; } +SdfPath MayaUsdRPrim::_GetUpdatedMaterialId(HdRprim* rprim, HdSceneDelegate* delegate) +{ + const SdfPath& id = rprim->GetId(); + const SdfPath materialId = delegate->GetMaterialId(id); + +#ifdef HDVP2_MATERIAL_CONSOLIDATION_UPDATE_WORKAROUND + const SdfPath& origMaterialId = rprim->GetMaterialId(); + if (materialId != origMaterialId) { + HdRenderIndex& renderIndex = delegate->GetRenderIndex(); + + if (!origMaterialId.IsEmpty()) { + HdVP2Material* material = static_cast( + renderIndex.GetSprim(HdPrimTypeTokens->material, origMaterialId)); + if (material) { + material->UnsubscribeFromMaterialUpdates(id); + } + } + + if (!materialId.IsEmpty()) { + HdVP2Material* material = static_cast( + renderIndex.GetSprim(HdPrimTypeTokens->material, materialId)); + if (material) { + material->SubscribeForMaterialUpdates(id); + } + } + } +#endif + + return materialId; +} + PXR_NAMESPACE_CLOSE_SCOPE diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h index e05aff8a56..5c0309c787 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h @@ -185,6 +185,8 @@ class MayaUsdRPrim void _SyncSharedData(HdRprimSharedData& sharedData, HdSceneDelegate* delegate, HdDirtyBits const* dirtyBits, TfToken const& reprToken, SdfPath const& id, ReprVector const& reprs); + SdfPath _GetUpdatedMaterialId(HdRprim* rprim, HdSceneDelegate* delegate); + void _PropagateDirtyBitsCommon(HdDirtyBits& bits, const ReprVector& reprs) const; void _MakeOtherReprRenderItemsInvisible(const TfToken&, const ReprVector&); diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 28c35bd788..119641f097 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -817,29 +817,7 @@ void HdVP2Mesh::Sync( } if (*dirtyBits & HdChangeTracker::DirtyMaterialId) { - const SdfPath materialId = delegate->GetMaterialId(id); - -#ifdef HDVP2_MATERIAL_CONSOLIDATION_UPDATE_WORKAROUND - const SdfPath& origMaterialId = GetMaterialId(); - if (materialId != origMaterialId) { - if (!origMaterialId.IsEmpty()) { - HdVP2Material* material = static_cast( - renderIndex.GetSprim(HdPrimTypeTokens->material, origMaterialId)); - if (material) { - material->UnsubscribeFromMaterialUpdates(id); - } - } - - if (!materialId.IsEmpty()) { - HdVP2Material* material = static_cast( - renderIndex.GetSprim(HdPrimTypeTokens->material, materialId)); - if (material) { - material->SubscribeForMaterialUpdates(id); - } - } - } -#endif - + const SdfPath materialId = _GetUpdatedMaterialId(this, delegate); #if HD_API_VERSION < 37 _SetMaterialId(renderIndex.GetChangeTracker(), materialId); #else From 1e3babe03be2b451a98b68ab0a841a9309f6ad9e Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Thu, 10 Feb 2022 09:04:41 -0500 Subject: [PATCH 12/13] Adding new method _AddNewRepr and merging appropriate code in there --- .../render/vp2RenderDelegate/basisCurves.cpp | 18 ++--------------- .../vp2RenderDelegate/mayaPrimCommon.cpp | 20 +++++++++++++++++++ .../render/vp2RenderDelegate/mayaPrimCommon.h | 2 ++ lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 17 ++-------------- 4 files changed, 26 insertions(+), 31 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index 2af8f46425..5905b9a921 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -1306,23 +1306,9 @@ void HdVP2BasisCurves::_InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBit if (ARCH_UNLIKELY(!subSceneContainer)) return; - if (_reprs.empty()) { - _FirstInitRepr(dirtyBits, GetId()); - } - - _ReprVector::iterator it - = std::find_if(_reprs.begin(), _reprs.end(), _ReprComparator(reprToken)); - if (it != _reprs.end()) { - _SetDirtyRepr(it->second); + HdReprSharedPtr repr = _AddNewRepr(reprToken, _reprs, dirtyBits, GetId()); + if (!repr) return; - } - - // add new repr - _reprs.emplace_back(reprToken, std::make_shared()); - HdReprSharedPtr repr = _reprs.back().second; - - // set dirty bit to say we need to sync a new repr - *dirtyBits |= HdChangeTracker::NewRepr; _BasisCurvesReprConfig::DescArray descs = _GetReprDesc(reprToken); diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp index 0fc73a0114..ca74630e8f 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp @@ -245,6 +245,26 @@ void MayaUsdRPrim::_SetDirtyRepr(const HdReprSharedPtr& repr) } } +HdReprSharedPtr MayaUsdRPrim::_AddNewRepr(TfToken const& reprToken, ReprVector& reprs, HdDirtyBits* dirtyBits, SdfPath const& id) +{ + if (reprs.empty()) { + _FirstInitRepr(dirtyBits, id); + } + + ReprVector::const_iterator it + = std::find_if(reprs.begin(), reprs.end(), [reprToken](ReprVector::const_reference e) { return reprToken == e.first; }); + if (it != reprs.end()) { + _SetDirtyRepr(it->second); + return nullptr; + } + + // set dirty bit to say we need to sync a new repr + *dirtyBits |= HdChangeTracker::NewRepr; + + reprs.emplace_back(reprToken, std::make_shared()); + return reprs.back().second; +} + void MayaUsdRPrim::_PropagateDirtyBitsCommon(HdDirtyBits& bits, const ReprVector& reprs) const { if (bits & HdChangeTracker::AllDirty) { diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h index 5c0309c787..e42c9210c8 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h @@ -181,6 +181,8 @@ class MayaUsdRPrim void _SetDirtyRepr(const HdReprSharedPtr& repr); + HdReprSharedPtr _AddNewRepr(TfToken const& reprToken, ReprVector& reprs, HdDirtyBits* dirtyBits, SdfPath const& id); + bool _SyncCommon(HdDirtyBits* dirtyBits, const SdfPath& id, HdReprSharedPtr const& curRepr, HdRenderIndex& renderIndex); void _SyncSharedData(HdRprimSharedData& sharedData, HdSceneDelegate* delegate, HdDirtyBits const* dirtyBits, TfToken const& reprToken, SdfPath const& id, ReprVector const& reprs); diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 119641f097..4057f381c5 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -1087,22 +1087,9 @@ void HdVP2Mesh::_InitRepr(const TfToken& reprToken, HdDirtyBits* dirtyBits) if (ARCH_UNLIKELY(!subSceneContainer)) return; - if (_reprs.empty()) { - _FirstInitRepr(dirtyBits, GetId()); - } - - _ReprVector::const_iterator it - = std::find_if(_reprs.begin(), _reprs.end(), _ReprComparator(reprToken)); - if (it != _reprs.end()) { - _SetDirtyRepr(it->second); + HdReprSharedPtr repr = _AddNewRepr(reprToken, _reprs, dirtyBits, GetId()); + if (!repr) return; - } - - _reprs.emplace_back(reprToken, std::make_shared()); - HdReprSharedPtr repr = _reprs.back().second; - - // set dirty bit to say we need to sync a new repr - *dirtyBits |= HdChangeTracker::NewRepr; _MeshReprConfig::DescArray descs = _GetReprDesc(reprToken); From bb6acae48bddc1759bcc810cbe2248c4f9761215 Mon Sep 17 00:00:00 2001 From: Ivan Vlasov Date: Thu, 10 Feb 2022 09:08:18 -0500 Subject: [PATCH 13/13] Formatting with clang-format --- .../render/vp2RenderDelegate/basisCurves.cpp | 23 ++++++++-- .../vp2RenderDelegate/mayaPrimCommon.cpp | 45 +++++++++++++++---- .../render/vp2RenderDelegate/mayaPrimCommon.h | 41 +++++++++++++---- lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp | 19 ++++++-- 4 files changed, 104 insertions(+), 24 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp index 5905b9a921..79360d6362 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/basisCurves.cpp @@ -1340,7 +1340,11 @@ void HdVP2BasisCurves::_InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBit case HdBasisCurvesGeomStyleWire: // The item is used for wireframe display and selection highlight. if (reprToken == HdReprTokens->wire) { - renderItem = _CreateWireframeRenderItem(renderItemName, kOpaqueGray, MSelectionMask::kSelectNurbsCurves, MHWRender::MFrameContext::kExcludeNurbsCurves); + renderItem = _CreateWireframeRenderItem( + renderItemName, + kOpaqueGray, + MSelectionMask::kSelectNurbsCurves, + MHWRender::MFrameContext::kExcludeNurbsCurves); drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight); #ifdef HAS_DEFAULT_MATERIAL_SUPPORT_API renderItem->setDefaultMaterialHandling(MRenderItem::SkipWhenDefaultMaterialActive); @@ -1348,7 +1352,11 @@ void HdVP2BasisCurves::_InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBit } // The item is used for bbox display and selection highlight. else if (reprToken == HdVP2ReprTokens->bbox) { - renderItem = _CreateBoundingBoxRenderItem(renderItemName, kOpaqueGray, MSelectionMask::kSelectNurbsCurves, MHWRender::MFrameContext::kExcludeNurbsCurves); + renderItem = _CreateBoundingBoxRenderItem( + renderItemName, + kOpaqueGray, + MSelectionMask::kSelectNurbsCurves, + MHWRender::MFrameContext::kExcludeNurbsCurves); drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight); #ifdef HAS_DEFAULT_MATERIAL_SUPPORT_API renderItem->setDefaultMaterialHandling(MRenderItem::SkipWhenDefaultMaterialActive); @@ -1356,7 +1364,11 @@ void HdVP2BasisCurves::_InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBit } #ifdef HAS_DEFAULT_MATERIAL_SUPPORT_API else if (reprToken == HdVP2ReprTokens->defaultMaterial) { - renderItem = _CreateWireframeRenderItem(renderItemName, kOpaqueGray, MSelectionMask::kSelectNurbsCurves, MHWRender::MFrameContext::kExcludeNurbsCurves); + renderItem = _CreateWireframeRenderItem( + renderItemName, + kOpaqueGray, + MSelectionMask::kSelectNurbsCurves, + MHWRender::MFrameContext::kExcludeNurbsCurves); renderItem->setDrawMode(MHWRender::MGeometry::kAll); drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight); renderItem->setDefaultMaterialHandling( @@ -1366,7 +1378,10 @@ void HdVP2BasisCurves::_InitRepr(TfToken const& reprToken, HdDirtyBits* dirtyBit break; #ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT case HdBasisCurvesGeomStylePoints: - renderItem = _CreatePointsRenderItem(renderItemName, MSelectionMask::kSelectNurbsCurves, MHWRender::MFrameContext::kExcludeNurbsCurves); + renderItem = _CreatePointsRenderItem( + renderItemName, + MSelectionMask::kSelectNurbsCurves, + MHWRender::MFrameContext::kExcludeNurbsCurves); break; #endif default: TF_WARN("Unsupported geomStyle"); break; diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp index ca74630e8f..204ac76c5e 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp @@ -245,14 +245,20 @@ void MayaUsdRPrim::_SetDirtyRepr(const HdReprSharedPtr& repr) } } -HdReprSharedPtr MayaUsdRPrim::_AddNewRepr(TfToken const& reprToken, ReprVector& reprs, HdDirtyBits* dirtyBits, SdfPath const& id) +HdReprSharedPtr MayaUsdRPrim::_AddNewRepr( + TfToken const& reprToken, + ReprVector& reprs, + HdDirtyBits* dirtyBits, + SdfPath const& id) { if (reprs.empty()) { _FirstInitRepr(dirtyBits, id); } ReprVector::const_iterator it - = std::find_if(reprs.begin(), reprs.end(), [reprToken](ReprVector::const_reference e) { return reprToken == e.first; }); + = std::find_if(reprs.begin(), reprs.end(), [reprToken](ReprVector::const_reference e) { + return reprToken == e.first; + }); if (it != reprs.end()) { _SetDirtyRepr(it->second); return nullptr; @@ -311,7 +317,11 @@ void MayaUsdRPrim::_PropagateDirtyBitsCommon(HdDirtyBits& bits, const ReprVector /*! \brief Create render item for bbox repr. */ -MHWRender::MRenderItem* MayaUsdRPrim::_CreateBoundingBoxRenderItem(const MString& name, const MColor& color, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const +MHWRender::MRenderItem* MayaUsdRPrim::_CreateBoundingBoxRenderItem( + const MString& name, + const MColor& color, + const MSelectionMask& selectionMask, + MUint64 exclusionFlag) const { MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create( name, MHWRender::MRenderItem::DecorationItem, MHWRender::MGeometry::kLines); @@ -338,7 +348,11 @@ MHWRender::MRenderItem* MayaUsdRPrim::_CreateBoundingBoxRenderItem(const MString /*! \brief Create render item for wireframe repr. */ -MHWRender::MRenderItem* MayaUsdRPrim::_CreateWireframeRenderItem(const MString& name, const MColor& color, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const +MHWRender::MRenderItem* MayaUsdRPrim::_CreateWireframeRenderItem( + const MString& name, + const MColor& color, + const MSelectionMask& selectionMask, + MUint64 exclusionFlag) const { MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create( name, MHWRender::MRenderItem::DecorationItem, MHWRender::MGeometry::kLines); @@ -374,7 +388,10 @@ MHWRender::MRenderItem* MayaUsdRPrim::_CreateWireframeRenderItem(const MString& #ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT /*! \brief Create render item for points repr. */ -MHWRender::MRenderItem* MayaUsdRPrim::_CreatePointsRenderItem(const MString& name, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const +MHWRender::MRenderItem* MayaUsdRPrim::_CreatePointsRenderItem( + const MString& name, + const MSelectionMask& selectionMask, + MUint64 exclusionFlag) const { MHWRender::MRenderItem* const renderItem = MHWRender::MRenderItem::Create( name, MHWRender::MRenderItem::DecorationItem, MHWRender::MGeometry::kPoints); @@ -409,7 +426,7 @@ MHWRender::MRenderItem* MayaUsdRPrim::_CreatePointsRenderItem(const MString& nam HdVP2DrawItems and corresponding RenderItems. */ void MayaUsdRPrim::_MakeOtherReprRenderItemsInvisible( - const TfToken& reprToken, + const TfToken& reprToken, const ReprVector& reprs) { for (const std::pair& pair : reprs) { @@ -461,7 +478,13 @@ void MayaUsdRPrim::_HideAllDrawItems(HdReprSharedPtr const& curRepr) } } -void MayaUsdRPrim::_SyncSharedData(HdRprimSharedData& sharedData, HdSceneDelegate* delegate, HdDirtyBits const* dirtyBits, TfToken const& reprToken, SdfPath const& id, ReprVector const& reprs) +void MayaUsdRPrim::_SyncSharedData( + HdRprimSharedData& sharedData, + HdSceneDelegate* delegate, + HdDirtyBits const* dirtyBits, + TfToken const& reprToken, + SdfPath const& id, + ReprVector const& reprs) { if (HdChangeTracker::IsExtentDirty(*dirtyBits, id)) { sharedData.bounds.SetRange(delegate->GetExtent(id)); @@ -499,7 +522,11 @@ void MayaUsdRPrim::_SyncSharedData(HdRprimSharedData& sharedData, HdSceneDelegat #endif } -bool MayaUsdRPrim::_SyncCommon(HdDirtyBits* dirtyBits, const SdfPath& id, HdReprSharedPtr const& curRepr, HdRenderIndex& renderIndex) +bool MayaUsdRPrim::_SyncCommon( + HdDirtyBits* dirtyBits, + const SdfPath& id, + HdReprSharedPtr const& curRepr, + HdRenderIndex& renderIndex) { auto* const param = static_cast(_delegate->GetRenderParam()); ProxyRenderDelegate& drawScene = param->GetDrawScene(); @@ -531,7 +558,7 @@ bool MayaUsdRPrim::_SyncCommon(HdDirtyBits* dirtyBits, const SdfPath& id, HdRepr SdfPath MayaUsdRPrim::_GetUpdatedMaterialId(HdRprim* rprim, HdSceneDelegate* delegate) { const SdfPath& id = rprim->GetId(); - const SdfPath materialId = delegate->GetMaterialId(id); + const SdfPath materialId = delegate->GetMaterialId(id); #ifdef HDVP2_MATERIAL_CONSOLIDATION_UPDATE_WORKAROUND const SdfPath& origMaterialId = rprim->GetMaterialId(); diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h index e42c9210c8..31a9ca8070 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h +++ b/lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h @@ -181,11 +181,25 @@ class MayaUsdRPrim void _SetDirtyRepr(const HdReprSharedPtr& repr); - HdReprSharedPtr _AddNewRepr(TfToken const& reprToken, ReprVector& reprs, HdDirtyBits* dirtyBits, SdfPath const& id); - - bool _SyncCommon(HdDirtyBits* dirtyBits, const SdfPath& id, HdReprSharedPtr const& curRepr, HdRenderIndex& renderIndex); - - void _SyncSharedData(HdRprimSharedData& sharedData, HdSceneDelegate* delegate, HdDirtyBits const* dirtyBits, TfToken const& reprToken, SdfPath const& id, ReprVector const& reprs); + HdReprSharedPtr _AddNewRepr( + TfToken const& reprToken, + ReprVector& reprs, + HdDirtyBits* dirtyBits, + SdfPath const& id); + + bool _SyncCommon( + HdDirtyBits* dirtyBits, + const SdfPath& id, + HdReprSharedPtr const& curRepr, + HdRenderIndex& renderIndex); + + void _SyncSharedData( + HdRprimSharedData& sharedData, + HdSceneDelegate* delegate, + HdDirtyBits const* dirtyBits, + TfToken const& reprToken, + SdfPath const& id, + ReprVector const& reprs); SdfPath _GetUpdatedMaterialId(HdRprim* rprim, HdSceneDelegate* delegate); @@ -198,11 +212,22 @@ class MayaUsdRPrim //! Helper utility function to adapt Maya API changes. static void _SetWantConsolidation(MHWRender::MRenderItem& renderItem, bool state); - MHWRender::MRenderItem* _CreateWireframeRenderItem(const MString& name, const MColor& color, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const; - MHWRender::MRenderItem* _CreateBoundingBoxRenderItem(const MString& name, const MColor& color, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const; + MHWRender::MRenderItem* _CreateWireframeRenderItem( + const MString& name, + const MColor& color, + const MSelectionMask& selectionMask, + MUint64 exclusionFlag) const; + MHWRender::MRenderItem* _CreateBoundingBoxRenderItem( + const MString& name, + const MColor& color, + const MSelectionMask& selectionMask, + MUint64 exclusionFlag) const; #ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT - MHWRender::MRenderItem* _CreatePointsRenderItem(const MString& name, const MSelectionMask& selectionMask, MUint64 exclusionFlag) const; + MHWRender::MRenderItem* _CreatePointsRenderItem( + const MString& name, + const MSelectionMask& selectionMask, + MUint64 exclusionFlag) const; #endif virtual TfToken& _RenderTag() = 0; diff --git a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp index 4057f381c5..57dbe7aca0 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp @@ -1189,17 +1189,30 @@ void HdVP2Mesh::_InitRepr(const TfToken& reprToken, HdDirtyBits* dirtyBits) #endif // The item is used for wireframe display and selection highlight. else if (reprToken == HdReprTokens->wire) { - renderItem = _CreateWireframeRenderItem(renderItemName, kOpaqueBlue, MSelectionMask::kSelectMeshes, MHWRender::MFrameContext::kExcludeMeshes); + renderItem = _CreateWireframeRenderItem( + renderItemName, + kOpaqueBlue, + MSelectionMask::kSelectMeshes, + MHWRender::MFrameContext::kExcludeMeshes); drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight); } // The item is used for bbox display and selection highlight. else if (reprToken == HdVP2ReprTokens->bbox) { - renderItem = _CreateBoundingBoxRenderItem(renderItemName, kOpaqueBlue, MSelectionMask::kSelectMeshes, MHWRender::MFrameContext::kExcludeMeshes); + renderItem = _CreateBoundingBoxRenderItem( + renderItemName, + kOpaqueBlue, + MSelectionMask::kSelectMeshes, + MHWRender::MFrameContext::kExcludeMeshes); drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight); } break; #ifndef MAYA_NEW_POINT_SNAPPING_SUPPORT - case HdMeshGeomStylePoints: renderItem = _CreatePointsRenderItem(renderItemName, MSelectionMask::kSelectMeshVerts, MHWRender::MFrameContext::kExcludeMeshes); break; + case HdMeshGeomStylePoints: + renderItem = _CreatePointsRenderItem( + renderItemName, + MSelectionMask::kSelectMeshVerts, + MHWRender::MFrameContext::kExcludeMeshes); + break; #endif default: TF_WARN("Unsupported geomStyle"); break; }