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) {
|
foreach(ShaderInput *input, output->links) {
|
||||||
if(scheduled.find(input->parent) != scheduled.end()) {
|
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.
|
* by other dependencies. No need to re-schedule it.
|
||||||
*/
|
*/
|
||||||
continue;
|
continue;
|
||||||
|
@@ -3177,6 +3177,13 @@ ValueNode::ValueNode()
|
|||||||
add_output("Value", SHADER_SOCKET_FLOAT);
|
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)
|
void ValueNode::compile(SVMCompiler& compiler)
|
||||||
{
|
{
|
||||||
ShaderOutput *val_out = output("Value");
|
ShaderOutput *val_out = output("Value");
|
||||||
@@ -3201,6 +3208,13 @@ ColorNode::ColorNode()
|
|||||||
add_output("Color", SHADER_SOCKET_COLOR);
|
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)
|
void ColorNode::compile(SVMCompiler& compiler)
|
||||||
{
|
{
|
||||||
ShaderOutput *color_out = output("Color");
|
ShaderOutput *color_out = output("Color");
|
||||||
|
@@ -485,6 +485,8 @@ class ValueNode : public ShaderNode {
|
|||||||
public:
|
public:
|
||||||
SHADER_NODE_CLASS(ValueNode)
|
SHADER_NODE_CLASS(ValueNode)
|
||||||
|
|
||||||
|
bool constant_fold(ShaderOutput *socket, float3 *optimized_value);
|
||||||
|
|
||||||
float value;
|
float value;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -492,6 +494,8 @@ class ColorNode : public ShaderNode {
|
|||||||
public:
|
public:
|
||||||
SHADER_NODE_CLASS(ColorNode)
|
SHADER_NODE_CLASS(ColorNode)
|
||||||
|
|
||||||
|
bool constant_fold(ShaderOutput *socket, float3 *optimized_value);
|
||||||
|
|
||||||
float3 value;
|
float3 value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user