[Bf-blender-cvs] [f593075] master: Fix T48368: Cycles mix RGB constant folding bug after recent refactor.

Brecht Van Lommel noreply at git.blender.org
Sat May 7 14:22:56 CEST 2016


Commit: f5930759a68dc464181a971c67314be6ab712315
Author: Brecht Van Lommel
Date:   Sat May 7 14:08:00 2016 +0200
Branches: master
https://developer.blender.org/rBf5930759a68dc464181a971c67314be6ab712315

Fix T48368: Cycles mix RGB constant folding bug after recent refactor.

===================================================================

M	intern/cycles/render/nodes.cpp

===================================================================

diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 7066164..c1841f3 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;
 		}
 	}




More information about the Bf-blender-cvs mailing list