[Bf-blender-cvs] [4d688e73934] viewport-compositor: Viewport Compositor: Port Normal node

Omar Emara noreply at git.blender.org
Tue Dec 28 20:02:45 CET 2021


Commit: 4d688e73934e3505853b265c29ce6288d8d29feb
Author: Omar Emara
Date:   Sat Nov 13 20:54:46 2021 +0200
Branches: viewport-compositor
https://developer.blender.org/rB4d688e73934e3505853b265c29ce6288d8d29feb

Viewport Compositor: Port Normal node

This patch ports the Normal node to the viewport compositor. The shader
is a straightforward port of the compositor code.

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

M	source/blender/gpu/CMakeLists.txt
M	source/blender/gpu/intern/gpu_material_library.c
A	source/blender/gpu/shaders/composite/gpu_shader_composite_normal.glsl
M	source/blender/nodes/composite/nodes/node_composite_normal.cc

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

diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index 87bba8f8e86..b7a57f85f52 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -296,6 +296,7 @@ data_to_c_simple(shaders/composite/gpu_shader_composite_hue_saturation_value.gls
 data_to_c_simple(shaders/composite/gpu_shader_composite_image.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_invert.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_map_value.glsl SRC)
+data_to_c_simple(shaders/composite/gpu_shader_composite_normal.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_posterize.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_separate_combine.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_set_alpha.glsl SRC)
diff --git a/source/blender/gpu/intern/gpu_material_library.c b/source/blender/gpu/intern/gpu_material_library.c
index 04c79393ef8..dd061934a4a 100644
--- a/source/blender/gpu/intern/gpu_material_library.c
+++ b/source/blender/gpu/intern/gpu_material_library.c
@@ -62,6 +62,7 @@ extern char datatoc_gpu_shader_composite_hue_saturation_value_glsl[];
 extern char datatoc_gpu_shader_composite_image_glsl[];
 extern char datatoc_gpu_shader_composite_invert_glsl[];
 extern char datatoc_gpu_shader_composite_map_value_glsl[];
+extern char datatoc_gpu_shader_composite_normal_glsl[];
 extern char datatoc_gpu_shader_composite_posterize_glsl[];
 extern char datatoc_gpu_shader_composite_separate_combine_glsl[];
 extern char datatoc_gpu_shader_composite_set_alpha_glsl[];
@@ -255,6 +256,11 @@ static GPUMaterialLibrary gpu_shader_composite_map_value_library = {
     .dependencies = {NULL},
 };
 
+static GPUMaterialLibrary gpu_shader_composite_normal_library = {
+    .code = datatoc_gpu_shader_composite_normal_glsl,
+    .dependencies = {NULL},
+};
+
 static GPUMaterialLibrary gpu_shader_composite_posterize_library = {
     .code = datatoc_gpu_shader_composite_posterize_glsl,
     .dependencies = {NULL},
@@ -783,6 +789,7 @@ static GPUMaterialLibrary *gpu_material_libraries[] = {
     &gpu_shader_composite_image_library,
     &gpu_shader_composite_invert_library,
     &gpu_shader_composite_map_value_library,
+    &gpu_shader_composite_normal_library,
     &gpu_shader_composite_posterize_library,
     &gpu_shader_composite_separate_combined_library,
     &gpu_shader_composite_set_alpha_library,
diff --git a/source/blender/gpu/shaders/composite/gpu_shader_composite_normal.glsl b/source/blender/gpu/shaders/composite/gpu_shader_composite_normal.glsl
new file mode 100644
index 00000000000..a2e3b6c4aaa
--- /dev/null
+++ b/source/blender/gpu/shaders/composite/gpu_shader_composite_normal.glsl
@@ -0,0 +1,9 @@
+void node_composite_normal(vec3 input_vector,
+                           vec3 input_normal,
+                           out vec3 result_normal,
+                           out float result_dot)
+{
+  vec3 normal = normalize(input_normal);
+  result_normal = normal;
+  result_dot = -dot(input_vector, normal);
+}
diff --git a/source/blender/nodes/composite/nodes/node_composite_normal.cc b/source/blender/nodes/composite/nodes/node_composite_normal.cc
index 7531025daa5..c5c224ddecb 100644
--- a/source/blender/nodes/composite/nodes/node_composite_normal.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_normal.cc
@@ -35,12 +35,22 @@ static bNodeSocketTemplate cmp_node_normal_out[] = {
     {-1, ""},
 };
 
+static int node_composite_gpu_normal(GPUMaterial *mat,
+                                     bNode *node,
+                                     bNodeExecData *UNUSED(execdata),
+                                     GPUNodeStack *in,
+                                     GPUNodeStack *out)
+{
+  return GPU_stack_link(mat, node, "node_composite_normal", in, out, GPU_uniform(out[0].vec));
+}
+
 void register_node_type_cmp_normal(void)
 {
   static bNodeType ntype;
 
   cmp_node_type_base(&ntype, CMP_NODE_NORMAL, "Normal", NODE_CLASS_OP_VECTOR, 0);
   node_type_socket_templates(&ntype, cmp_node_normal_in, cmp_node_normal_out);
+  node_type_gpu(&ntype, node_composite_gpu_normal);
 
   nodeRegisterType(&ntype);
 }



More information about the Bf-blender-cvs mailing list