From 4951b86ee7c2ea64d21e9a1123e4be3568dcf379 Mon Sep 17 00:00:00 2001 From: krickw Date: Wed, 7 Jul 2021 11:37:44 -0400 Subject: [PATCH 1/2] Detect and save a pointer to the cardsUv primvar reader rather than AND uv primvar reader to fix assertion. --- .../render/vp2RenderDelegate/material.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/material.cpp b/lib/mayaUsd/render/vp2RenderDelegate/material.cpp index 1758d5ddf8..9669c4e7ce 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/material.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/material.cpp @@ -1390,7 +1390,7 @@ void HdVP2Material::_ApplyVP2Fixes(HdMaterialNetwork& outNet, const HdMaterialNe // HdMaterialNetwork. Keep track of the existence of some key nodes to help // with performance. HdMaterialNode* usdDrawModeCardsNode = nullptr; - HdMaterialNode* stPrimvarReader = nullptr; + HdMaterialNode* cardsUvPrimvarReader = nullptr; // Get the shader registry so I can look up the real names of shading nodes. SdrRegistry& shaderReg = SdrRegistry::GetInstance(); @@ -1437,9 +1437,9 @@ void HdVP2Material::_ApplyVP2Fixes(HdMaterialNetwork& outNet, const HdMaterialNe usdDrawModeCardsNode = &outNode; } - if (_IsUsdFloat2PrimvarReader(outNode)) { - TF_VERIFY(!stPrimvarReader); // I haven't thought about what to do for multiple UV sets! - stPrimvarReader = &outNode; + if (_IsUsdFloat2PrimvarReader(outNode) && outNode.parameters[_tokens->varname] == _tokens->cardsUv) { + TF_VERIFY(!cardsUvPrimvarReader); + cardsUvPrimvarReader = &outNode; } outNode.path = SdfPath(outNode.identifier.GetString() + std::to_string(++nodeCounter)); @@ -1470,24 +1470,24 @@ void HdVP2Material::_ApplyVP2Fixes(HdMaterialNetwork& outNet, const HdMaterialNe if (_IsUsdUVTexture(node) && usdDrawModeCardsNode) { // the DrawModeCardsFragment has UsdUVtexture nodes without primvar readers. // Add a primvar reader to each UsdUVTexture which doesn't already have one. - if (!stPrimvarReader) { + if (!cardsUvPrimvarReader) { HdMaterialNode stReader; stReader.identifier = UsdImagingTokens->UsdPrimvarReader_float2; stReader.path = SdfPath(stReader.identifier.GetString() + std::to_string(++nodeCounter)); stReader.parameters[_tokens->varname] = _tokens->cardsUv; outNet.nodes.push_back(stReader); - stPrimvarReader = &outNet.nodes.back(); + cardsUvPrimvarReader = &outNet.nodes.back(); // Specifically looking for the cardsUv primvar outNet.primvars.push_back(_tokens->cardsUv); } - // search for an existing relationship between stPrimvarReader & node. + // search for an existing relationship between cardsUvPrimvarReader & node. // TODO: if there are multiple UV sets this can fail, it is looking for // a connection to a specific UsdPrimvarReader_float2. bool hasRelationship = false; for (const HdMaterialRelationship& rel : tmpNet.relationships) { - if (rel.inputId == stPrimvarReader->path && rel.inputName == _tokens->result + if (rel.inputId == cardsUvPrimvarReader->path && rel.inputName == _tokens->result && rel.outputId == node.path && rel.outputName == _tokens->st) { hasRelationship = true; break; @@ -1502,7 +1502,7 @@ void HdVP2Material::_ApplyVP2Fixes(HdMaterialNetwork& outNet, const HdMaterialNe TF_VERIFY(usdDrawModeCardsNode); HdMaterialRelationship newRel - = { stPrimvarReader->path, _tokens->result, node.path, _tokens->st }; + = { cardsUvPrimvarReader->path, _tokens->result, node.path, _tokens->st }; outNet.relationships.push_back(newRel); } } From 45b6a49d73b2df750f054a686cd4e0ef5b384816 Mon Sep 17 00:00:00 2001 From: krickw Date: Wed, 7 Jul 2021 13:22:35 -0400 Subject: [PATCH 2/2] Clang format. --- lib/mayaUsd/render/vp2RenderDelegate/material.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/mayaUsd/render/vp2RenderDelegate/material.cpp b/lib/mayaUsd/render/vp2RenderDelegate/material.cpp index 9669c4e7ce..599c8f1d6b 100644 --- a/lib/mayaUsd/render/vp2RenderDelegate/material.cpp +++ b/lib/mayaUsd/render/vp2RenderDelegate/material.cpp @@ -1437,7 +1437,8 @@ void HdVP2Material::_ApplyVP2Fixes(HdMaterialNetwork& outNet, const HdMaterialNe usdDrawModeCardsNode = &outNode; } - if (_IsUsdFloat2PrimvarReader(outNode) && outNode.parameters[_tokens->varname] == _tokens->cardsUv) { + if (_IsUsdFloat2PrimvarReader(outNode) + && outNode.parameters[_tokens->varname] == _tokens->cardsUv) { TF_VERIFY(!cardsUvPrimvarReader); cardsUvPrimvarReader = &outNode; }