Commit: a3d774e4c94868c747230a200e0a41e371f547bd
Author: Thomas Dinges
Date:   Sun Dec 6 23:47:38 2015 +0100
Branches: master
https://developer.blender.org/rBa3d774e4c94868c747230a200e0a41e371f547bd

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.

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

M       intern/cycles/render/graph.cpp
M       intern/cycles/render/nodes.cpp
M       intern/cycles/render/nodes.h

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

diff --git a/intern/cycles/render/graph.cpp b/intern/cycles/render/graph.cpp
index c9f39d4..def4387 100644
--- a/intern/cycles/render/graph.cpp
+++ b/intern/cycles/render/graph.cpp
@@ -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;
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index fd8410c..e4f5885 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -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");
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index 1fa4b67..51efbc3 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -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;
 };

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to