Revision: 50266
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50266
Author:   dfelinto
Date:     2012-08-29 17:30:14 +0000 (Wed, 29 Aug 2012)
Log Message:
-----------
Cycles bugfix: [32431] Cycles Math Node : Clamp does not work
the OSL solution is slightly different than the svm, but I think it's fine.

thanks Lukas Toenne for helping with a fix on the original patch

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_shader.cpp
    trunk/blender/intern/cycles/kernel/osl/nodes/node_math.osl
    trunk/blender/intern/cycles/kernel/svm/svm_math.h
    trunk/blender/intern/cycles/kernel/svm/svm_types.h
    trunk/blender/intern/cycles/render/nodes.cpp
    trunk/blender/intern/cycles/render/nodes.h

Modified: trunk/blender/intern/cycles/blender/blender_shader.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_shader.cpp      2012-08-29 
12:49:10 UTC (rev 50265)
+++ trunk/blender/intern/cycles/blender/blender_shader.cpp      2012-08-29 
17:30:14 UTC (rev 50266)
@@ -244,6 +244,7 @@
                        BL::ShaderNodeMath b_math_node(b_node);
                        MathNode *math = new MathNode();
                        math->type = 
MathNode::type_enum[b_math_node.operation()];
+                       math->use_clamp = b_math_node.use_clamp();
                        node = math;
                        break;
                }

Modified: trunk/blender/intern/cycles/kernel/osl/nodes/node_math.osl
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/nodes/node_math.osl  2012-08-29 
12:49:10 UTC (rev 50265)
+++ trunk/blender/intern/cycles/kernel/osl/nodes/node_math.osl  2012-08-29 
17:30:14 UTC (rev 50266)
@@ -40,6 +40,7 @@
 
 shader node_math(
        string type = "Add",
+       int Clamp = false,
        float Value1 = 0.0,
        float Value2 = 0.0,
        output float Value = 0.0)
@@ -80,5 +81,8 @@
                Value = Value1 < Value2;
        if(type == "Greater Than")
                Value = Value1 > Value2;
+
+       if(Clamp)
+               Value = clamp(Value1, 0.0, 1.0);
 }
 

Modified: trunk/blender/intern/cycles/kernel/svm/svm_math.h
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm_math.h   2012-08-29 12:49:10 UTC 
(rev 50265)
+++ trunk/blender/intern/cycles/kernel/svm/svm_math.h   2012-08-29 17:30:14 UTC 
(rev 50266)
@@ -108,6 +108,8 @@
                Fac = Fac1 < Fac2;
        else if(type == NODE_MATH_GREATER_THAN)
                Fac = Fac1 > Fac2;
+       else if(type == NODE_MATH_CLAMP)
+               Fac = clamp(Fac1, 0.0f, 1.0f);
        else
                Fac = 0.0f;
        

Modified: trunk/blender/intern/cycles/kernel/svm/svm_types.h
===================================================================
--- trunk/blender/intern/cycles/kernel/svm/svm_types.h  2012-08-29 12:49:10 UTC 
(rev 50265)
+++ trunk/blender/intern/cycles/kernel/svm/svm_types.h  2012-08-29 17:30:14 UTC 
(rev 50266)
@@ -183,7 +183,8 @@
        NODE_MATH_MAXIMUM,
        NODE_MATH_ROUND,
        NODE_MATH_LESS_THAN,
-       NODE_MATH_GREATER_THAN
+       NODE_MATH_GREATER_THAN,
+       NODE_MATH_CLAMP /* used for the clamp UI option */
 } NodeMath;
 
 typedef enum NodeVectorMath {

Modified: trunk/blender/intern/cycles/render/nodes.cpp
===================================================================
--- trunk/blender/intern/cycles/render/nodes.cpp        2012-08-29 12:49:10 UTC 
(rev 50265)
+++ trunk/blender/intern/cycles/render/nodes.cpp        2012-08-29 17:30:14 UTC 
(rev 50266)
@@ -2391,6 +2391,8 @@
 {
        type = ustring("Add");
 
+       use_clamp = false;
+
        add_input("Value1", SHADER_SOCKET_FLOAT);
        add_input("Value2", SHADER_SOCKET_FLOAT);
        add_output("Value",  SHADER_SOCKET_FLOAT);
@@ -2435,11 +2437,17 @@
 
        compiler.add_node(NODE_MATH, type_enum[type], value1_in->stack_offset, 
value2_in->stack_offset);
        compiler.add_node(NODE_MATH, value_out->stack_offset);
+
+       if(use_clamp) {
+               compiler.add_node(NODE_MATH, NODE_MATH_CLAMP, 
value_out->stack_offset);
+               compiler.add_node(NODE_MATH, value_out->stack_offset);
+       }
 }
 
 void MathNode::compile(OSLCompiler& compiler)
 {
        compiler.parameter("type", type);
+       compiler.parameter("Clamp", use_clamp);
        compiler.add(this, "node_math");
 }
 

Modified: trunk/blender/intern/cycles/render/nodes.h
===================================================================
--- trunk/blender/intern/cycles/render/nodes.h  2012-08-29 12:49:10 UTC (rev 
50265)
+++ trunk/blender/intern/cycles/render/nodes.h  2012-08-29 17:30:14 UTC (rev 
50266)
@@ -385,6 +385,8 @@
 public:
        SHADER_NODE_CLASS(MathNode)
 
+       bool use_clamp;
+
        ustring type;
        static ShaderEnum type_enum;
 };

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to