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

This commit is contained in:
Brecht Van Lommel 2016-05-07 14:08:00 +02:00
parent 68e856da03
commit f5930759a6

@ -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) {
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) {
if (color2_in->link)
graph->relink(this, color_out, color2_in->link);
else
*optimized_value = color2_in->value;
return true;
}
}