diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2016-05-07 15:08:00 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2016-05-07 15:21:15 +0300 |
commit | f5930759a68dc464181a971c67314be6ab712315 (patch) | |
tree | fcebc8a30c7998e0bec473fbb4e0c69945077bbe /intern | |
parent | 68e856da03ed893f47c73e96aba76798aafed748 (diff) |
Fix T48368: Cycles mix RGB constant folding bug after recent refactor.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/render/nodes.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index 7066164ac05..c1841f310b5 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -3320,7 +3320,7 @@ void MixNode::compile(OSLCompiler& compiler) compiler.add(this, "node_mix"); } -bool MixNode::constant_fold(ShaderGraph *graph, ShaderOutput * /*socket*/, float3 * /*optimized_value*/) +bool MixNode::constant_fold(ShaderGraph *graph, ShaderOutput * /*socket*/, float3 * optimized_value) { if(type != ustring("Mix")) { return false; @@ -3332,22 +3332,27 @@ bool MixNode::constant_fold(ShaderGraph *graph, ShaderOutput * /*socket*/, float ShaderOutput *color_out = output("Color"); /* remove useless mix colors nodes */ - if(color1_in->link == color2_in->link) { + if(color1_in->link && color1_in->link == color2_in->link) { graph->relink(this, color_out, color1_in->link); return true; } /* remove unused mix color input when factor is 0.0 or 1.0 */ - /* check for color links and make sure factor link is disconnected */ - if(color1_in->link && color2_in->link && !fac_in->link) { + if(!fac_in->link) { /* factor 0.0 */ if(fac_in->value.x == 0.0f) { - graph->relink(this, color_out, color1_in->link); + if (color1_in->link) + graph->relink(this, color_out, color1_in->link); + else + *optimized_value = color1_in->value; return true; } /* factor 1.0 */ else if(fac_in->value.x == 1.0f) { - graph->relink(this, color_out, color2_in->link); + if (color2_in->link) + graph->relink(this, color_out, color2_in->link); + else + *optimized_value = color2_in->value; return true; } } |