From 457d537fe4f33cfb16e5672404aa9f87797d9d23 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 16 Nov 2020 19:28:58 +0100 Subject: Fix T82673: Cycles crash with zero emission strength and linked emission color --- intern/cycles/render/nodes.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index fa6096ff39b..5e21ad15cc8 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -2785,7 +2785,7 @@ void PrincipledBsdfNode::expand(ShaderGraph *graph) ShaderInput *emission_strength_in = input("Emission Strength"); if ((emission_in->link || emission != make_float3(0.0f, 0.0f, 0.0f)) && (emission_strength_in->link || emission_strength != 0.0f)) { - /* Create add closure and emission. */ + /* Create add closure and emission, and relink inputs. */ AddClosureNode *add = graph->create_node(); EmissionNode *emission_node = graph->create_node(); ShaderOutput *new_out = add->output("Closure"); @@ -2801,6 +2801,16 @@ void PrincipledBsdfNode::expand(ShaderGraph *graph) principled_out = new_out; } + else { + /* Disconnect unused links if the other value is zero, required before + * we remove the input from the node entirely. */ + if (emission_in->link) { + emission_in->disconnect(); + } + if (emission_strength_in->link) { + emission_strength_in->disconnect(); + } + } ShaderInput *alpha_in = input("Alpha"); if (alpha_in->link || alpha != 1.0f) { @@ -2818,6 +2828,7 @@ void PrincipledBsdfNode::expand(ShaderGraph *graph) } remove_input(emission_in); + remove_input(emission_strength_in); remove_input(alpha_in); } -- cgit v1.2.3