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:
@@ -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;
|
||||
|
@@ -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");
|
||||
|
@@ -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;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user