diff --git a/libraries/bxdf/genglsl/gltf_pbr.mtlx b/libraries/bxdf/genglsl/gltf_pbr.mtlx deleted file mode 100644 index c60c566b0b..0000000000 --- a/libraries/bxdf/genglsl/gltf_pbr.mtlx +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/libraries/bxdf/genglsl/open_pbr_surface.mtlx b/libraries/bxdf/genglsl/open_pbr_surface.mtlx deleted file mode 100644 index 85d8717d4e..0000000000 --- a/libraries/bxdf/genglsl/open_pbr_surface.mtlx +++ /dev/null @@ -1,596 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/libraries/bxdf/genglsl/standard_surface.mtlx b/libraries/bxdf/genglsl/standard_surface.mtlx deleted file mode 100644 index bedae8e366..0000000000 --- a/libraries/bxdf/genglsl/standard_surface.mtlx +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/MaterialXGenShader/ShaderGraph.cpp b/source/MaterialXGenShader/ShaderGraph.cpp index 796e328178..cc6d013970 100644 --- a/source/MaterialXGenShader/ShaderGraph.cpp +++ b/source/MaterialXGenShader/ShaderGraph.cpp @@ -1070,23 +1070,29 @@ void ShaderGraph::optimize(GenContext& context) _nodeOrder = usedNodesVec; } - // we take a copy of the node list because we might modify it during the optimization + // We store node names (not raw pointers) because optimization may call + // removeNode(), which deletes nodes via shared_ptr. Raw pointers would dangle. if (context.getOptions().optReplaceBsdfMixWithLinearCombination) { - const vector nodeList = getNodes(); - for (ShaderNode* node : nodeList) + vector mixBsdfNodeNames; + for (ShaderNode* node : getNodes()) { - // first check the node is still in the graph, and hasn't been removed by a - // prior optimization - if (!getNode(node->getName())) + if (node->hasClassification(ShaderNode::Classification::MIX_BSDF)) + { + mixBsdfNodeNames.push_back(node->getName()); + } + } + + for (const string& name : mixBsdfNodeNames) + { + // Look up fresh each iteration - node may have been removed by prior optimization + ShaderNode* node = getNode(name); + if (!node) continue; - if (node->hasClassification(ShaderNode::Classification::MIX_BSDF)) + if (!optimizeMixMixBsdf(node, context)) { - if (!optimizeMixMixBsdf(node, context)) - { - optimizeMixBsdf(node, context); - } + optimizeMixBsdf(node, context); } } }