Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2016-05-07 15:08:00 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2016-05-07 15:21:15 +0300
commitf5930759a68dc464181a971c67314be6ab712315 (patch)
treefcebc8a30c7998e0bec473fbb4e0c69945077bbe /intern
parent68e856da03ed893f47c73e96aba76798aafed748 (diff)
Fix T48368: Cycles mix RGB constant folding bug after recent refactor.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/render/nodes.cpp17
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;
}
}