Cycles: Fold Value and RGB node as well.

This way, connecting Value or RGB node to e.g. a Math node will still allow folding.

Note: The same should be done for the ConvertNode, but I leave that for another day.
This commit is contained in:
Thomas Dinges
2015-12-06 23:47:38 +01:00
parent c6be3fe997
commit a3d774e4c9
3 changed files with 19 additions and 1 deletions

View File

@@ -617,7 +617,7 @@ void ShaderGraph::constant_fold()
*/
foreach(ShaderInput *input, output->links) {
if(scheduled.find(input->parent) != scheduled.end()) {
/* Node might be not yet optimized but scheduled already
/* Node might not be optimized yet but scheduled already
* by other dependencies. No need to re-schedule it.
*/
continue;

View File

@@ -3177,6 +3177,13 @@ ValueNode::ValueNode()
add_output("Value", SHADER_SOCKET_FLOAT);
}
bool ValueNode::constant_fold(ShaderOutput *socket, float3 *optimized_value)
{
*optimized_value = make_float3(value, value, value);
return true;
}
void ValueNode::compile(SVMCompiler& compiler)
{
ShaderOutput *val_out = output("Value");
@@ -3201,6 +3208,13 @@ ColorNode::ColorNode()
add_output("Color", SHADER_SOCKET_COLOR);
}
bool ColorNode::constant_fold(ShaderOutput *socket, float3 *optimized_value)
{
*optimized_value = value;
return true;
}
void ColorNode::compile(SVMCompiler& compiler)
{
ShaderOutput *color_out = output("Color");

View File

@@ -485,6 +485,8 @@ class ValueNode : public ShaderNode {
public:
SHADER_NODE_CLASS(ValueNode)
bool constant_fold(ShaderOutput *socket, float3 *optimized_value);
float value;
};
@@ -492,6 +494,8 @@ class ColorNode : public ShaderNode {
public:
SHADER_NODE_CLASS(ColorNode)
bool constant_fold(ShaderOutput *socket, float3 *optimized_value);
float3 value;
};