[Bf-blender-cvs] [f6ebbfe7dee] master: Nodes: move some texture nodes to c++

Jacques Lucke noreply at git.blender.org
Mon Sep 13 11:54:24 CEST 2021


Commit: f6ebbfe7dee663c4d5587e386882df42a24ffa93
Author: Jacques Lucke
Date:   Mon Sep 13 11:54:05 2021 +0200
Branches: master
https://developer.blender.org/rBf6ebbfe7dee663c4d5587e386882df42a24ffa93

Nodes: move some texture nodes to c++

This is necessary to be able to use them in geometry nodes.

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

M	source/blender/nodes/CMakeLists.txt
R094	source/blender/nodes/shader/nodes/node_shader_tex_gradient.c	source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc
R069	source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c	source/blender/nodes/shader/nodes/node_shader_tex_musgrave.cc
R086	source/blender/nodes/shader/nodes/node_shader_tex_noise.c	source/blender/nodes/shader/nodes/node_shader_tex_noise.cc
R076	source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c	source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc
R086	source/blender/nodes/shader/nodes/node_shader_tex_white_noise.c	source/blender/nodes/shader/nodes/node_shader_tex_white_noise.cc

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

diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index ac2200d496b..614be1d7229 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -292,16 +292,16 @@ set(SRC
   shader/nodes/node_shader_tex_checker.c
   shader/nodes/node_shader_tex_coord.c
   shader/nodes/node_shader_tex_environment.c
-  shader/nodes/node_shader_tex_gradient.c
+  shader/nodes/node_shader_tex_gradient.cc
   shader/nodes/node_shader_tex_image.c
   shader/nodes/node_shader_tex_magic.c
-  shader/nodes/node_shader_tex_musgrave.c
-  shader/nodes/node_shader_tex_noise.c
+  shader/nodes/node_shader_tex_musgrave.cc
+  shader/nodes/node_shader_tex_noise.cc
   shader/nodes/node_shader_tex_pointdensity.c
   shader/nodes/node_shader_tex_sky.c
-  shader/nodes/node_shader_tex_voronoi.c
+  shader/nodes/node_shader_tex_voronoi.cc
   shader/nodes/node_shader_tex_wave.c
-  shader/nodes/node_shader_tex_white_noise.c
+  shader/nodes/node_shader_tex_white_noise.cc
   shader/nodes/node_shader_uvAlongStroke.c
   shader/nodes/node_shader_uvmap.c
   shader/nodes/node_shader_valToRgb.cc
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_gradient.c b/source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc
similarity index 94%
rename from source/blender/nodes/shader/nodes/node_shader_tex_gradient.c
rename to source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc
index e3d4bad2bf8..0c0d75179a9 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_gradient.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_gradient.cc
@@ -43,7 +43,8 @@ static bNodeSocketTemplate sh_node_tex_gradient_out[] = {
 
 static void node_shader_init_tex_gradient(bNodeTree *UNUSED(ntree), bNode *node)
 {
-  NodeTexGradient *tex = MEM_callocN(sizeof(NodeTexGradient), "NodeTexGradient");
+  NodeTexGradient *tex = (NodeTexGradient *)MEM_callocN(sizeof(NodeTexGradient),
+                                                        "NodeTexGradient");
   BKE_texture_mapping_default(&tex->base.tex_mapping, TEXMAP_TYPE_POINT);
   BKE_texture_colormapping_default(&tex->base.color_mapping);
   tex->gradient_type = SHD_BLEND_LINEAR;
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c b/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.cc
similarity index 69%
rename from source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c
rename to source/blender/nodes/shader/nodes/node_shader_tex_musgrave.cc
index 420c5b75926..f5e9aef3aad 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.cc
@@ -49,7 +49,8 @@ static bNodeSocketTemplate sh_node_tex_musgrave_out[] = {
 
 static void node_shader_init_tex_musgrave(bNodeTree *UNUSED(ntree), bNode *node)
 {
-  NodeTexMusgrave *tex = MEM_callocN(sizeof(NodeTexMusgrave), "NodeTexMusgrave");
+  NodeTexMusgrave *tex = (NodeTexMusgrave *)MEM_callocN(sizeof(NodeTexMusgrave),
+                                                        "NodeTexMusgrave");
   BKE_texture_mapping_default(&tex->base.tex_mapping, TEXMAP_TYPE_POINT);
   BKE_texture_colormapping_default(&tex->base.color_mapping);
   tex->musgrave_type = SHD_MUSGRAVE_FBM;
@@ -58,6 +59,41 @@ static void node_shader_init_tex_musgrave(bNodeTree *UNUSED(ntree), bNode *node)
   node->storage = tex;
 }
 
+static const char *gpu_shader_name_get(const int type, const int dimensions)
+{
+  BLI_assert(type >= 0 && type < 5);
+  BLI_assert(dimensions > 0 && dimensions < 5);
+
+  switch (type) {
+    case SHD_MUSGRAVE_MULTIFRACTAL:
+      return std::array{"node_tex_musgrave_multi_fractal_1d",
+                        "node_tex_musgrave_multi_fractal_2d",
+                        "node_tex_musgrave_multi_fractal_3d",
+                        "node_tex_musgrave_multi_fractal_4d"}[dimensions - 1];
+    case SHD_MUSGRAVE_FBM:
+      return std::array{"node_tex_musgrave_fBm_1d",
+                        "node_tex_musgrave_fBm_2d",
+                        "node_tex_musgrave_fBm_3d",
+                        "node_tex_musgrave_fBm_4d"}[dimensions - 1];
+    case SHD_MUSGRAVE_HYBRID_MULTIFRACTAL:
+      return std::array{"node_tex_musgrave_hybrid_multi_fractal_1d",
+                        "node_tex_musgrave_hybrid_multi_fractal_2d",
+                        "node_tex_musgrave_hybrid_multi_fractal_3d",
+                        "node_tex_musgrave_hybrid_multi_fractal_4d"}[dimensions - 1];
+    case SHD_MUSGRAVE_RIDGED_MULTIFRACTAL:
+      return std::array{"node_tex_musgrave_ridged_multi_fractal_1d",
+                        "node_tex_musgrave_ridged_multi_fractal_2d",
+                        "node_tex_musgrave_ridged_multi_fractal_3d",
+                        "node_tex_musgrave_ridged_multi_fractal_4d"}[dimensions - 1];
+    case SHD_MUSGRAVE_HETERO_TERRAIN:
+      return std::array{"node_tex_musgrave_hetero_terrain_1d",
+                        "node_tex_musgrave_hetero_terrain_2d",
+                        "node_tex_musgrave_hetero_terrain_3d",
+                        "node_tex_musgrave_hetero_terrain_4d"}[dimensions - 1];
+  }
+  return nullptr;
+}
+
 static int node_shader_gpu_tex_musgrave(GPUMaterial *mat,
                                         bNode *node,
                                         bNodeExecData *UNUSED(execdata),
@@ -71,53 +107,9 @@ static int node_shader_gpu_tex_musgrave(GPUMaterial *mat,
   int dimensions = tex->dimensions;
   int type = tex->musgrave_type;
 
-  static const char *names[][5] = {
-      [SHD_MUSGRAVE_MULTIFRACTAL] =
-          {
-              "",
-              "node_tex_musgrave_multi_fractal_1d",
-              "node_tex_musgrave_multi_fractal_2d",
-              "node_tex_musgrave_multi_fractal_3d",
-              "node_tex_musgrave_multi_fractal_4d",
-          },
-      [SHD_MUSGRAVE_FBM] =
-          {
-              "",
-              "node_tex_musgrave_fBm_1d",
-              "node_tex_musgrave_fBm_2d",
-              "node_tex_musgrave_fBm_3d",
-              "node_tex_musgrave_fBm_4d",
-          },
-      [SHD_MUSGRAVE_HYBRID_MULTIFRACTAL] =
-          {
-              "",
-              "node_tex_musgrave_hybrid_multi_fractal_1d",
-              "node_tex_musgrave_hybrid_multi_fractal_2d",
-              "node_tex_musgrave_hybrid_multi_fractal_3d",
-              "node_tex_musgrave_hybrid_multi_fractal_4d",
-          },
-      [SHD_MUSGRAVE_RIDGED_MULTIFRACTAL] =
-          {
-              "",
-              "node_tex_musgrave_ridged_multi_fractal_1d",
-              "node_tex_musgrave_ridged_multi_fractal_2d",
-              "node_tex_musgrave_ridged_multi_fractal_3d",
-              "node_tex_musgrave_ridged_multi_fractal_4d",
-          },
-      [SHD_MUSGRAVE_HETERO_TERRAIN] =
-          {
-              "",
-              "node_tex_musgrave_hetero_terrain_1d",
-              "node_tex_musgrave_hetero_terrain_2d",
-              "node_tex_musgrave_hetero_terrain_3d",
-              "node_tex_musgrave_hetero_terrain_4d",
-          },
-  };
-
-  BLI_assert(type >= 0 && type < 5);
-  BLI_assert(dimensions > 0 && dimensions < 5);
+  const char *name = gpu_shader_name_get(type, dimensions);
 
-  return GPU_stack_link(mat, node, names[type][dimensions], in, out);
+  return GPU_stack_link(mat, node, name, in, out);
 }
 
 static void node_shader_update_tex_musgrave(bNodeTree *UNUSED(ntree), bNode *node)
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_noise.c b/source/blender/nodes/shader/nodes/node_shader_tex_noise.cc
similarity index 86%
rename from source/blender/nodes/shader/nodes/node_shader_tex_noise.c
rename to source/blender/nodes/shader/nodes/node_shader_tex_noise.cc
index 7b67c2d1f2e..de8e0916f4d 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_noise.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_noise.cc
@@ -48,7 +48,7 @@ static bNodeSocketTemplate sh_node_tex_noise_out[] = {
 
 static void node_shader_init_tex_noise(bNodeTree *UNUSED(ntree), bNode *node)
 {
-  NodeTexNoise *tex = MEM_callocN(sizeof(NodeTexNoise), "NodeTexNoise");
+  NodeTexNoise *tex = (NodeTexNoise *)MEM_callocN(sizeof(NodeTexNoise), "NodeTexNoise");
   BKE_texture_mapping_default(&tex->base.tex_mapping, TEXMAP_TYPE_POINT);
   BKE_texture_colormapping_default(&tex->base.color_mapping);
   tex->dimensions = 3;
@@ -56,6 +56,16 @@ static void node_shader_init_tex_noise(bNodeTree *UNUSED(ntree), bNode *node)
   node->storage = tex;
 }
 
+static const char *gpu_shader_get_name(const int dimensions)
+{
+  BLI_assert(dimensions >= 1 && dimensions <= 4);
+  return std::array{"node_noise_texture_1d",
+                    "node_noise_texture_2d",
+                    "node_noise_texture_3d",
+                    "node_noise_texture_4d"}[dimensions - 1];
+  return nullptr;
+}
+
 static int node_shader_gpu_tex_noise(GPUMaterial *mat,
                                      bNode *node,
                                      bNodeExecData *UNUSED(execdata),
@@ -66,14 +76,8 @@ static int node_shader_gpu_tex_noise(GPUMaterial *mat,
   node_shader_gpu_tex_mapping(mat, node, in, out);
 
   NodeTexNoise *tex = (NodeTexNoise *)node->storage;
-  static const char *names[] = {
-      "",
-      "node_noise_texture_1d",
-      "node_noise_texture_2d",
-      "node_noise_texture_3d",
-      "node_noise_texture_4d",
-  };
-  return GPU_stack_link(mat, node, names[tex->dimensions], in, out);
+  const char *name = gpu_shader_get_name(tex->dimensions);
+  return GPU_stack_link(mat, node, name, in, out);
 }
 
 static void node_shader_update_tex_noise(bNodeTree *UNUSED(ntree), bNode *node)
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c b/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc
similarity index 76%
rename from source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c
rename to source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc
index 64dc44fc67d..1cc715d99ea 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.cc
@@ -69,7 +69,7 @@ static bNodeSocketTemplate sh_node_tex_voronoi_out[] = {
 
 static void node_shader_init_tex_voronoi(bNodeTree *UNUSED(ntree), bNode *no

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list