[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