[Bf-blender-cvs] [025c0f44411] soc-2019-cycles-procedural: Add Floor operator to Vector Math node.

OmarSquircleArt noreply at git.blender.org
Sun Aug 4 17:24:47 CEST 2019


Commit: 025c0f44411f9da74ce66da22af148e81b13eaeb
Author: OmarSquircleArt
Date:   Sun Aug 4 17:25:08 2019 +0200
Branches: soc-2019-cycles-procedural
https://developer.blender.org/rB025c0f44411f9da74ce66da22af148e81b13eaeb

Add Floor operator to Vector Math node.

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

M	intern/cycles/kernel/shaders/node_vector_math.osl
M	intern/cycles/kernel/svm/svm_math_util.h
M	intern/cycles/kernel/svm/svm_types.h
M	intern/cycles/render/nodes.cpp
M	source/blender/gpu/shaders/gpu_shader_material.glsl
M	source/blender/makesdna/DNA_node_types.h
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/shader/nodes/node_shader_vectMath.c

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

diff --git a/intern/cycles/kernel/shaders/node_vector_math.osl b/intern/cycles/kernel/shaders/node_vector_math.osl
index cba2b9f6487..c8220724801 100644
--- a/intern/cycles/kernel/shaders/node_vector_math.osl
+++ b/intern/cycles/kernel/shaders/node_vector_math.osl
@@ -87,6 +87,9 @@ shader node_vector_math(string type = "add",
   else if (type == "snap") {
     Vector = snap(A, B);
   }
+  else if (type == "floor") {
+    Vector = floor(A);
+  }
   else if (type == "modulo") {
     Vector = mod(A, B);
   }
diff --git a/intern/cycles/kernel/svm/svm_math_util.h b/intern/cycles/kernel/svm/svm_math_util.h
index 50c13929532..ae78e0749ab 100644
--- a/intern/cycles/kernel/svm/svm_math_util.h
+++ b/intern/cycles/kernel/svm/svm_math_util.h
@@ -61,6 +61,9 @@ ccl_device void svm_vector_math(
                             floorf(safe_divide(a.y, b.y)) * b.y,
                             floorf(safe_divide(a.z, b.z)) * b.z);
       break;
+    case NODE_VECTOR_MATH_FLOOR:
+      *vector = floor(a);
+      break;
     case NODE_VECTOR_MATH_MODULO:
       *vector = make_float3(safe_modulo(a.x, b.x), safe_modulo(a.y, b.y), safe_modulo(a.z, b.z));
       break;
diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h
index 33ede286211..971c22988f2 100644
--- a/intern/cycles/kernel/svm/svm_types.h
+++ b/intern/cycles/kernel/svm/svm_types.h
@@ -295,6 +295,7 @@ typedef enum NodeVectorMathType {
   NODE_VECTOR_MATH_NORMALIZE,
 
   NODE_VECTOR_MATH_SNAP,
+  NODE_VECTOR_MATH_FLOOR,
   NODE_VECTOR_MATH_MODULO,
   NODE_VECTOR_MATH_ABSOLUTE,
   NODE_VECTOR_MATH_MINIMUM,
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index be7748f46e0..0925b3218fb 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -5724,6 +5724,7 @@ NODE_DEFINE(VectorMathNode)
   type_enum.insert("normalize", NODE_VECTOR_MATH_NORMALIZE);
 
   type_enum.insert("snap", NODE_VECTOR_MATH_SNAP);
+  type_enum.insert("floor", NODE_VECTOR_MATH_FLOOR);
   type_enum.insert("modulo", NODE_VECTOR_MATH_MODULO);
   type_enum.insert("absolute", NODE_VECTOR_MATH_ABSOLUTE);
   type_enum.insert("minimum", NODE_VECTOR_MATH_MINIMUM);
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index 7d9f5fc1b18..c830e08c99f 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -547,6 +547,11 @@ void vec_math_snap(vec3 a, vec3 b, float scale, out vec3 outvec, out float outva
   outvec.z = (b.z != 0.0) ? floor(a.z / b.z) * b.z : 0.0;
 }
 
+void vec_math_floor(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
+{
+  outvec = floor(a);
+}
+
 void vec_math_modulo(vec3 a, vec3 b, float scale, out vec3 outvec, out float outval)
 {
   math_modulo(a.x, b.x, outvec.x);
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 929ae1840f9..d1c9ba02fb1 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1222,10 +1222,11 @@ enum {
   NODE_VECTOR_MATH_NORMALIZE = 11,
 
   NODE_VECTOR_MATH_SNAP = 12,
-  NODE_VECTOR_MATH_MODULO = 13,
-  NODE_VECTOR_MATH_ABSOLUTE = 14,
-  NODE_VECTOR_MATH_MINIMUM = 15,
-  NODE_VECTOR_MATH_MAXIMUM = 16,
+  NODE_VECTOR_MATH_FLOOR = 13,
+  NODE_VECTOR_MATH_MODULO = 14,
+  NODE_VECTOR_MATH_ABSOLUTE = 15,
+  NODE_VECTOR_MATH_MINIMUM = 16,
+  NODE_VECTOR_MATH_MAXIMUM = 17,
 };
 
 /* mix rgb node flags */
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index cefcf7e1995..48b3ddf3b26 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -168,6 +168,7 @@ const EnumPropertyItem rna_enum_node_vec_math_items[] = {
     {NODE_VECTOR_MATH_NORMALIZE, "NORMALIZE", 0, "Normalize", "Normalize A"},
     {0, "", ICON_NONE, NULL, NULL},
     {NODE_VECTOR_MATH_SNAP, "SNAP", 0, "Snap", "Round A to the nearest integer multiple of B"},
+    {NODE_VECTOR_MATH_FLOOR, "FLOOR", 0, "Floor", "Entrywise floor"},
     {NODE_VECTOR_MATH_MODULO, "MODULO", 0, "Modulo", "Entrywise modulo"},
     {NODE_VECTOR_MATH_ABSOLUTE, "ABSOLUTE", 0, "Absolute", "Entrywise absolute"},
     {NODE_VECTOR_MATH_MINIMUM, "MINIMUM", 0, "Minimum", "Entrywise minimum"},
diff --git a/source/blender/nodes/shader/nodes/node_shader_vectMath.c b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
index fddcd8dac84..ea1b56be15f 100644
--- a/source/blender/nodes/shader/nodes/node_shader_vectMath.c
+++ b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
@@ -56,6 +56,7 @@ static int gpu_shader_vect_math(GPUMaterial *mat,
       [NODE_VECTOR_MATH_NORMALIZE] = "vec_math_normalize",
 
       [NODE_VECTOR_MATH_SNAP] = "vec_math_snap",
+      [NODE_VECTOR_MATH_FLOOR] = "vec_math_floor",
       [NODE_VECTOR_MATH_MODULO] = "vec_math_modulo",
       [NODE_VECTOR_MATH_ABSOLUTE] = "vec_math_absolute",
       [NODE_VECTOR_MATH_MINIMUM] = "vec_math_minimum",
@@ -77,6 +78,7 @@ static void node_shader_update_vec_math(bNodeTree *UNUSED(ntree), bNode *node)
   nodeSetSocketAvailability(sockB,
                             !ELEM(node->custom1,
                                   NODE_VECTOR_MATH_SCALE,
+                                  NODE_VECTOR_MATH_FLOOR,
                                   NODE_VECTOR_MATH_LENGTH,
                                   NODE_VECTOR_MATH_ABSOLUTE,
                                   NODE_VECTOR_MATH_NORMALIZE));



More information about the Bf-blender-cvs mailing list