[Bf-blender-cvs] [ae7833d9da3] viewport-compositor: Viewport Compositor: Port Math node
Omar Emara
noreply at git.blender.org
Tue Dec 28 20:02:44 CET 2021
Commit: ae7833d9da374f32814e353227e2aec0a37e0668
Author: Omar Emara
Date: Sat Nov 13 15:49:21 2021 +0200
Branches: viewport-compositor
https://developer.blender.org/rBae7833d9da374f32814e353227e2aec0a37e0668
Viewport Compositor: Port Math node
This patch ports the Math node to the viewport compositor. The shading
math shader was moved into a common directory to be used by both
materials and the compositor.
===================================================================
M source/blender/gpu/CMakeLists.txt
M source/blender/gpu/intern/gpu_material_library.c
R100 source/blender/gpu/shaders/material/gpu_shader_material_math.glsl source/blender/gpu/shaders/common/gpu_shader_common_math.glsl
M source/blender/gpu/shaders/material/gpu_shader_material_clamp.glsl
M source/blender/nodes/composite/nodes/node_composite_math.cc
===================================================================
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index c4348698587..ea187c104c9 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -279,6 +279,7 @@ data_to_c_simple(shaders/common/gpu_shader_common_color_ramp.glsl SRC)
data_to_c_simple(shaders/common/gpu_shader_common_color_util.glsl SRC)
data_to_c_simple(shaders/common/gpu_shader_common_curves.glsl SRC)
data_to_c_simple(shaders/common/gpu_shader_common_math_util.glsl SRC)
+data_to_c_simple(shaders/common/gpu_shader_common_math.glsl SRC)
data_to_c_simple(shaders/common/gpu_shader_common_mix_rgb.glsl SRC)
data_to_c_simple(shaders/common/gpu_shader_common_hash.glsl SRC)
@@ -330,7 +331,6 @@ data_to_c_simple(shaders/material/gpu_shader_material_light_falloff.glsl SRC)
data_to_c_simple(shaders/material/gpu_shader_material_light_path.glsl SRC)
data_to_c_simple(shaders/material/gpu_shader_material_mapping.glsl SRC)
data_to_c_simple(shaders/material/gpu_shader_material_map_range.glsl SRC)
-data_to_c_simple(shaders/material/gpu_shader_material_math.glsl SRC)
data_to_c_simple(shaders/material/gpu_shader_material_mix_shader.glsl SRC)
data_to_c_simple(shaders/material/gpu_shader_material_noise.glsl SRC)
data_to_c_simple(shaders/material/gpu_shader_material_normal.glsl SRC)
diff --git a/source/blender/gpu/intern/gpu_material_library.c b/source/blender/gpu/intern/gpu_material_library.c
index bc7c23f4234..4f4c77831fd 100644
--- a/source/blender/gpu/intern/gpu_material_library.c
+++ b/source/blender/gpu/intern/gpu_material_library.c
@@ -45,6 +45,7 @@ extern char datatoc_gpu_shader_common_color_ramp_glsl[];
extern char datatoc_gpu_shader_common_color_util_glsl[];
extern char datatoc_gpu_shader_common_curves_glsl[];
extern char datatoc_gpu_shader_common_math_util_glsl[];
+extern char datatoc_gpu_shader_common_math_glsl[];
extern char datatoc_gpu_shader_common_mix_rgb_glsl[];
extern char datatoc_gpu_shader_common_hash_glsl[];
@@ -96,7 +97,6 @@ extern char datatoc_gpu_shader_material_light_falloff_glsl[];
extern char datatoc_gpu_shader_material_light_path_glsl[];
extern char datatoc_gpu_shader_material_mapping_glsl[];
extern char datatoc_gpu_shader_material_map_range_glsl[];
-extern char datatoc_gpu_shader_material_math_glsl[];
extern char datatoc_gpu_shader_material_mix_shader_glsl[];
extern char datatoc_gpu_shader_material_noise_glsl[];
extern char datatoc_gpu_shader_material_normal_glsl[];
@@ -156,6 +156,11 @@ static GPUMaterialLibrary gpu_shader_common_color_util_library = {
.dependencies = {NULL},
};
+static GPUMaterialLibrary gpu_shader_common_math_library = {
+ .code = datatoc_gpu_shader_common_math_glsl,
+ .dependencies = {&gpu_shader_common_math_util_library, NULL},
+};
+
static GPUMaterialLibrary gpu_shader_common_color_ramp_library = {
.code = datatoc_gpu_shader_common_color_ramp_glsl,
.dependencies = {NULL},
@@ -427,11 +432,6 @@ static GPUMaterialLibrary gpu_shader_material_map_range_library = {
.dependencies = {&gpu_shader_common_math_util_library, NULL},
};
-static GPUMaterialLibrary gpu_shader_material_math_library = {
- .code = datatoc_gpu_shader_material_math_glsl,
- .dependencies = {&gpu_shader_common_math_util_library, NULL},
-};
-
static GPUMaterialLibrary gpu_shader_material_mix_shader_library = {
.code = datatoc_gpu_shader_material_mix_shader_glsl,
.dependencies = {NULL},
@@ -665,6 +665,7 @@ static GPUMaterialLibrary gpu_shader_material_world_normals_library = {
static GPUMaterialLibrary *gpu_material_libraries[] = {
&gpu_shader_common_color_ramp_library,
&gpu_shader_common_math_util_library,
+ &gpu_shader_common_math_library,
&gpu_shader_common_color_util_library,
&gpu_shader_common_curves_library,
&gpu_shader_common_mix_rgb_library,
@@ -705,7 +706,6 @@ static GPUMaterialLibrary *gpu_material_libraries[] = {
&gpu_shader_material_light_path_library,
&gpu_shader_material_mapping_library,
&gpu_shader_material_map_range_library,
- &gpu_shader_material_math_library,
&gpu_shader_material_mix_shader_library,
&gpu_shader_material_normal_library,
&gpu_shader_material_normal_map_library,
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_math.glsl b/source/blender/gpu/shaders/common/gpu_shader_common_math.glsl
similarity index 100%
rename from source/blender/gpu/shaders/material/gpu_shader_material_math.glsl
rename to source/blender/gpu/shaders/common/gpu_shader_common_math.glsl
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_clamp.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_clamp.glsl
index f89608feff1..5a8572e956f 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_clamp.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_clamp.glsl
@@ -1,4 +1,4 @@
-void clamp_value(float value, float min, float max, out float result)
+void clamp_value(float value, const float min, const float max, out float result)
{
result = clamp(value, min, max);
}
diff --git a/source/blender/nodes/composite/nodes/node_composite_math.cc b/source/blender/nodes/composite/nodes/node_composite_math.cc
index ecddcc2ad32..d63b131f8ae 100644
--- a/source/blender/nodes/composite/nodes/node_composite_math.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_math.cc
@@ -23,6 +23,8 @@
#include "node_composite_util.hh"
+#include "NOD_math_functions.hh"
+
/* **************** SCALAR MATH ******************** */
static bNodeSocketTemplate cmp_node_math_in[] = {
{SOCK_FLOAT, N_("Value"), 0.5f, 0.5f, 0.5f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
@@ -32,6 +34,45 @@ static bNodeSocketTemplate cmp_node_math_in[] = {
static bNodeSocketTemplate cmp_node_math_out[] = {{SOCK_FLOAT, N_("Value")}, {-1, ""}};
+static const char *gpu_shader_get_name(int mode)
+{
+ const blender::nodes::FloatMathOperationInfo *info =
+ blender::nodes::get_float_math_operation_info(mode);
+ if (!info) {
+ return nullptr;
+ }
+ if (info->shader_name.is_empty()) {
+ return nullptr;
+ }
+ return info->shader_name.c_str();
+}
+
+static int node_composite_gpu_math(GPUMaterial *mat,
+ bNode *node,
+ bNodeExecData *UNUSED(execdata),
+ GPUNodeStack *in,
+ GPUNodeStack *out)
+{
+ const char *name = gpu_shader_get_name(node->custom1);
+ if (name == nullptr) {
+ return 0;
+ }
+
+ int valid = GPU_stack_link(mat, node, name, in, out);
+ if (!valid) {
+ return 0;
+ }
+
+ if (node->custom2 & SHD_MATH_CLAMP) {
+ const float min = 0.0f;
+ const float max = 1.0f;
+ return GPU_link(
+ mat, "clamp_value", out[0].link, GPU_constant(&min), GPU_constant(&max), &out[0].link);
+ }
+
+ return 1;
+}
+
void register_node_type_cmp_math(void)
{
static bNodeType ntype;
@@ -40,6 +81,7 @@ void register_node_type_cmp_math(void)
node_type_socket_templates(&ntype, cmp_node_math_in, cmp_node_math_out);
node_type_label(&ntype, node_math_label);
node_type_update(&ntype, node_math_update);
+ node_type_gpu(&ntype, node_composite_gpu_math);
nodeRegisterType(&ntype);
}
More information about the Bf-blender-cvs
mailing list