[Bf-blender-cvs] [16d4373158a] master: Nodes: move Math, Vector Math and Value shader nodes to c++ files

Jacques Lucke noreply at git.blender.org
Sat Jul 11 16:25:02 CEST 2020


Commit: 16d4373158a96d44fb105463f78e53566d0c784e
Author: Jacques Lucke
Date:   Sat Jul 11 16:24:53 2020 +0200
Branches: master
https://developer.blender.org/rB16d4373158a96d44fb105463f78e53566d0c784e

Nodes: move Math, Vector Math and Value shader nodes to c++ files

This required a little bit of refactoring, because we were using c-only
syntax for the gpu shader names. All tests are still passing.

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

M	source/blender/nodes/CMakeLists.txt
D	source/blender/nodes/shader/nodes/node_shader_math.c
A	source/blender/nodes/shader/nodes/node_shader_math.cc
R100	source/blender/nodes/shader/nodes/node_shader_value.c	source/blender/nodes/shader/nodes/node_shader_value.cc
R067	source/blender/nodes/shader/nodes/node_shader_vector_math.c	source/blender/nodes/shader/nodes/node_shader_vector_math.cc

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

diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index 2c4ca087efa..2381e499eee 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -178,7 +178,7 @@ set(SRC
   shader/nodes/node_shader_light_path.c
   shader/nodes/node_shader_map_range.c
   shader/nodes/node_shader_mapping.c
-  shader/nodes/node_shader_math.c
+  shader/nodes/node_shader_math.cc
   shader/nodes/node_shader_mixRgb.c
   shader/nodes/node_shader_mix_shader.c
   shader/nodes/node_shader_normal.c
@@ -216,10 +216,10 @@ set(SRC
   shader/nodes/node_shader_uvAlongStroke.c
   shader/nodes/node_shader_uvmap.c
   shader/nodes/node_shader_valToRgb.c
-  shader/nodes/node_shader_value.c
+  shader/nodes/node_shader_value.cc
   shader/nodes/node_shader_vectTransform.c
   shader/nodes/node_shader_vector_displacement.c
-  shader/nodes/node_shader_vector_math.c
+  shader/nodes/node_shader_vector_math.cc
   shader/nodes/node_shader_vector_rotate.c
   shader/nodes/node_shader_vertex_color.c
   shader/nodes/node_shader_volume_absorption.c
diff --git a/source/blender/nodes/shader/nodes/node_shader_math.c b/source/blender/nodes/shader/nodes/node_shader_math.c
deleted file mode 100644
index 8abebbf5081..00000000000
--- a/source/blender/nodes/shader/nodes/node_shader_math.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2005 Blender Foundation.
- * All rights reserved.
- */
-
-/** \file
- * \ingroup shdnodes
- */
-
-#include "node_shader_util.h"
-
-/* **************** SCALAR MATH ******************** */
-static bNodeSocketTemplate sh_node_math_in[] = {
-    {SOCK_FLOAT, N_("Value"), 0.5f, 0.5f, 0.5f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
-    {SOCK_FLOAT, N_("Value"), 0.5f, 0.5f, 0.5f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
-    {SOCK_FLOAT, N_("Value"), 0.0f, 0.5f, 0.5f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
-    {-1, ""}};
-
-static bNodeSocketTemplate sh_node_math_out[] = {{SOCK_FLOAT, N_("Value")}, {-1, ""}};
-
-static int gpu_shader_math(GPUMaterial *mat,
-                           bNode *node,
-                           bNodeExecData *UNUSED(execdata),
-                           GPUNodeStack *in,
-                           GPUNodeStack *out)
-{
-  static const char *names[] = {
-      [NODE_MATH_ADD] = "math_add",
-      [NODE_MATH_SUBTRACT] = "math_subtract",
-      [NODE_MATH_MULTIPLY] = "math_multiply",
-      [NODE_MATH_DIVIDE] = "math_divide",
-      [NODE_MATH_MULTIPLY_ADD] = "math_multiply_add",
-
-      [NODE_MATH_POWER] = "math_power",
-      [NODE_MATH_LOGARITHM] = "math_logarithm",
-      [NODE_MATH_EXPONENT] = "math_exponent",
-      [NODE_MATH_SQRT] = "math_sqrt",
-      [NODE_MATH_INV_SQRT] = "math_inversesqrt",
-      [NODE_MATH_ABSOLUTE] = "math_absolute",
-      [NODE_MATH_RADIANS] = "math_radians",
-      [NODE_MATH_DEGREES] = "math_degrees",
-
-      [NODE_MATH_MINIMUM] = "math_minimum",
-      [NODE_MATH_MAXIMUM] = "math_maximum",
-      [NODE_MATH_LESS_THAN] = "math_less_than",
-      [NODE_MATH_GREATER_THAN] = "math_greater_than",
-      [NODE_MATH_SIGN] = "math_sign",
-      [NODE_MATH_COMPARE] = "math_compare",
-      [NODE_MATH_SMOOTH_MIN] = "math_smoothmin",
-      [NODE_MATH_SMOOTH_MAX] = "math_smoothmax",
-
-      [NODE_MATH_ROUND] = "math_round",
-      [NODE_MATH_FLOOR] = "math_floor",
-      [NODE_MATH_CEIL] = "math_ceil",
-      [NODE_MATH_FRACTION] = "math_fraction",
-      [NODE_MATH_MODULO] = "math_modulo",
-      [NODE_MATH_TRUNC] = "math_trunc",
-      [NODE_MATH_SNAP] = "math_snap",
-      [NODE_MATH_WRAP] = "math_wrap",
-      [NODE_MATH_PINGPONG] = "math_pingpong",
-
-      [NODE_MATH_SINE] = "math_sine",
-      [NODE_MATH_COSINE] = "math_cosine",
-      [NODE_MATH_TANGENT] = "math_tangent",
-      [NODE_MATH_SINH] = "math_sinh",
-      [NODE_MATH_COSH] = "math_cosh",
-      [NODE_MATH_TANH] = "math_tanh",
-      [NODE_MATH_ARCSINE] = "math_arcsine",
-      [NODE_MATH_ARCCOSINE] = "math_arccosine",
-      [NODE_MATH_ARCTANGENT] = "math_arctangent",
-      [NODE_MATH_ARCTAN2] = "math_arctan2",
-  };
-
-  if (node->custom1 < ARRAY_SIZE(names) && names[node->custom1]) {
-    int ret = GPU_stack_link(mat, node, names[node->custom1], in, out);
-
-    if (ret && node->custom2 & SHD_MATH_CLAMP) {
-      float min[3] = {0.0f, 0.0f, 0.0f};
-      float max[3] = {1.0f, 1.0f, 1.0f};
-      GPU_link(
-          mat, "clamp_value", out[0].link, GPU_constant(min), GPU_constant(max), &out[0].link);
-    }
-    return ret;
-  }
-  else {
-    return 0;
-  }
-}
-
-void register_node_type_sh_math(void)
-{
-  static bNodeType ntype;
-
-  sh_fn_node_type_base(&ntype, SH_NODE_MATH, "Math", NODE_CLASS_CONVERTOR, 0);
-  node_type_socket_templates(&ntype, sh_node_math_in, sh_node_math_out);
-  node_type_label(&ntype, node_math_label);
-  node_type_gpu(&ntype, gpu_shader_math);
-  node_type_update(&ntype, node_math_update);
-
-  nodeRegisterType(&ntype);
-}
diff --git a/source/blender/nodes/shader/nodes/node_shader_math.cc b/source/blender/nodes/shader/nodes/node_shader_math.cc
new file mode 100644
index 00000000000..6de812bf52a
--- /dev/null
+++ b/source/blender/nodes/shader/nodes/node_shader_math.cc
@@ -0,0 +1,160 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2005 Blender Foundation.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup shdnodes
+ */
+
+#include "node_shader_util.h"
+
+/* **************** SCALAR MATH ******************** */
+static bNodeSocketTemplate sh_node_math_in[] = {
+    {SOCK_FLOAT, N_("Value"), 0.5f, 0.5f, 0.5f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
+    {SOCK_FLOAT, N_("Value"), 0.5f, 0.5f, 0.5f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
+    {SOCK_FLOAT, N_("Value"), 0.0f, 0.5f, 0.5f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
+    {-1, ""}};
+
+static bNodeSocketTemplate sh_node_math_out[] = {{SOCK_FLOAT, N_("Value")}, {-1, ""}};
+
+static const char *gpu_shader_get_name(int mode)
+{
+  switch (mode) {
+    case NODE_MATH_ADD:
+      return "math_add";
+    case NODE_MATH_SUBTRACT:
+      return "math_subtract";
+    case NODE_MATH_MULTIPLY:
+      return "math_multiply";
+    case NODE_MATH_DIVIDE:
+      return "math_divide";
+    case NODE_MATH_MULTIPLY_ADD:
+      return "math_multiply_add";
+
+    case NODE_MATH_POWER:
+      return "math_power";
+    case NODE_MATH_LOGARITHM:
+      return "math_logarithm";
+    case NODE_MATH_EXPONENT:
+      return "math_exponent";
+    case NODE_MATH_SQRT:
+      return "math_sqrt";
+    case NODE_MATH_INV_SQRT:
+      return "math_inversesqrt";
+    case NODE_MATH_ABSOLUTE:
+      return "math_absolute";
+    case NODE_MATH_RADIANS:
+      return "math_radians";
+    case NODE_MATH_DEGREES:
+      return "math_degrees";
+
+    case NODE_MATH_MINIMUM:
+      return "math_minimum";
+    case NODE_MATH_MAXIMUM:
+      return "math_maximum";
+    case NODE_MATH_LESS_THAN:
+      return "math_less_than";
+    case NODE_MATH_GREATER_THAN:
+      return "math_greater_than";
+    case NODE_MATH_SIGN:
+      return "math_sign";
+    case NODE_MATH_COMPARE:
+      return "math_compare";
+    case NODE_MATH_SMOOTH_MIN:
+      return "math_smoothmin";
+    case NODE_MATH_SMOOTH_MAX:
+      return "math_smoothmax";
+
+    case NODE_MATH_ROUND:
+      return "math_round";
+    case NODE_MATH_FLOOR:
+      return "math_floor";
+    case NODE_MATH_CEIL:
+      return "math_ceil";
+    case NODE_MATH_FRACTION:
+      return "math_fraction";
+    case NODE_MATH_MODULO:
+      return "math_modulo";
+    case NODE_MATH_TRUNC:
+      return "math_trunc";
+    case NODE_MATH_SNAP:
+      return "math_snap";
+    case NODE_MATH_WRAP:
+      return "math_wrap";
+    case NODE_MATH_PINGPONG:
+      return "math_pingpong";
+
+    case NODE_MATH_SINE:
+      return "math_sine";
+    case NODE_MATH_COSINE:
+      return "math_cosine";
+    case NODE_MATH_TANGENT:
+      return "math_tangent";
+    case NODE_MATH_SINH:
+      return "math_sinh";
+    case NODE_MATH_COSH:
+      return "math_cosh";
+    case NODE_MATH_TANH:
+      return "math_tanh";
+    case NODE_MATH_ARCSINE:
+      return "math_arcsine";
+    case NODE_MATH_ARCCOSINE:
+      return "math_arccosine";
+    case NODE_MATH_ARCTANGENT:
+      return "math_arctangent";
+    case NODE_MATH_ARCTAN2:
+      return "math_arctan2";
+  }
+  return nullptr;
+}
+
+static int gpu_shader_math(GPUMaterial *mat,
+                           bNode *node,
+                           bNodeExecData *UNUSED(execdata),
+                           GPUNodeStack *in,
+                           GPUNodeStack *out)
+{
+  const char *name = gpu_shader_get_name(node->custom1);
+  if (name != nullptr) {
+    int ret = GPU_stack_link(mat, node, name, in, out);
+
+    if (ret && node->custom2 & SHD_MATH_CLAMP) {
+      float min[3] = {0.0f, 0.0f, 0.0f};


@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list