[Bf-blender-cvs] [79fe3e14acc] viewport-compositor: Viewport Compositor: Port RGB To BW node

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


Commit: 79fe3e14acc2cb13819741abf78930bebf313a49
Author: Omar Emara
Date:   Sat Nov 13 16:12:19 2021 +0200
Branches: viewport-compositor
https://developer.blender.org/rB79fe3e14acc2cb13819741abf78930bebf313a49

Viewport Compositor: Port RGB To BW node

This patch ports the RGB To BW 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_color_to_luminance.glsl
M	source/blender/nodes/composite/nodes/node_composite_valToRgb.cc

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

diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index ea187c104c9..23d04d35f54 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -287,6 +287,7 @@ data_to_c_simple(shaders/composite/gpu_shader_composite_alpha_over.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_bright_contrast.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_color_balance.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_color_correction.glsl SRC)
+data_to_c_simple(shaders/composite/gpu_shader_composite_color_to_luminance.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_composite.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_exposure.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_gamma.glsl SRC)
diff --git a/source/blender/gpu/intern/gpu_material_library.c b/source/blender/gpu/intern/gpu_material_library.c
index 4f4c77831fd..47b911cc908 100644
--- a/source/blender/gpu/intern/gpu_material_library.c
+++ b/source/blender/gpu/intern/gpu_material_library.c
@@ -53,6 +53,7 @@ extern char datatoc_gpu_shader_composite_alpha_over_glsl[];
 extern char datatoc_gpu_shader_composite_bright_contrast_glsl[];
 extern char datatoc_gpu_shader_composite_color_balance_glsl[];
 extern char datatoc_gpu_shader_composite_color_correction_glsl[];
+extern char datatoc_gpu_shader_composite_color_to_luminance_glsl[];
 extern char datatoc_gpu_shader_composite_composite_glsl[];
 extern char datatoc_gpu_shader_composite_exposure_glsl[];
 extern char datatoc_gpu_shader_composite_gamma_glsl[];
@@ -207,6 +208,11 @@ static GPUMaterialLibrary gpu_shader_composite_color_correction_library = {
                      NULL},
 };
 
+static GPUMaterialLibrary gpu_shader_composite_color_to_luminance_library = {
+    .code = datatoc_gpu_shader_composite_color_to_luminance_glsl,
+    .dependencies = {&gpu_shader_common_color_util_library, NULL},
+};
+
 static GPUMaterialLibrary gpu_shader_composite_composite_library = {
     .code = datatoc_gpu_shader_composite_composite_glsl,
     .dependencies = {NULL},
@@ -756,6 +762,7 @@ static GPUMaterialLibrary *gpu_material_libraries[] = {
     &gpu_shader_composite_bright_contrast_library,
     &gpu_shader_composite_color_balance_library,
     &gpu_shader_composite_color_correction_library,
+    &gpu_shader_composite_color_to_luminance_library,
     &gpu_shader_composite_composite_library,
     &gpu_shader_composite_exposure_library,
     &gpu_shader_composite_gamma_library,
diff --git a/source/blender/gpu/shaders/composite/gpu_shader_composite_color_to_luminance.glsl b/source/blender/gpu/shaders/composite/gpu_shader_composite_color_to_luminance.glsl
new file mode 100644
index 00000000000..d51d09db1e5
--- /dev/null
+++ b/source/blender/gpu/shaders/composite/gpu_shader_composite_color_to_luminance.glsl
@@ -0,0 +1,4 @@
+void color_to_luminance(vec4 color, const vec3 luminance_coefficients, out float result)
+{
+  result = get_luminance(color.rgb, luminance_coefficients);
+}
diff --git a/source/blender/nodes/composite/nodes/node_composite_valToRgb.cc b/source/blender/nodes/composite/nodes/node_composite_valToRgb.cc
index dbe79b93908..ee71dd2d2da 100644
--- a/source/blender/nodes/composite/nodes/node_composite_valToRgb.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_valToRgb.cc
@@ -21,6 +21,7 @@
  * \ingroup cmpnodes
  */
 
+#include "IMB_colormanagement.h"
 #include "node_composite_util.hh"
 
 /* **************** VALTORGB ******************** */
@@ -124,6 +125,19 @@ static bNodeSocketTemplate cmp_node_rgbtobw_out[] = {
     {-1, ""},
 };
 
+static int node_composite_gpu_rgbtobw(GPUMaterial *mat,
+                                      bNode *node,
+                                      bNodeExecData *UNUSED(execdata),
+                                      GPUNodeStack *in,
+                                      GPUNodeStack *out)
+{
+  float luminance_coefficients[3];
+  IMB_colormanagement_get_luminance_coefficients(luminance_coefficients);
+
+  return GPU_stack_link(
+      mat, node, "color_to_luminance", in, out, GPU_constant(luminance_coefficients));
+}
+
 void register_node_type_cmp_rgbtobw(void)
 {
   static bNodeType ntype;
@@ -131,6 +145,7 @@ void register_node_type_cmp_rgbtobw(void)
   cmp_node_type_base(&ntype, CMP_NODE_RGBTOBW, "RGB to BW", NODE_CLASS_CONVERTER, 0);
   node_type_socket_templates(&ntype, cmp_node_rgbtobw_in, cmp_node_rgbtobw_out);
   node_type_size_preset(&ntype, NODE_SIZE_SMALL);
+  node_type_gpu(&ntype, node_composite_gpu_rgbtobw);
 
   nodeRegisterType(&ntype);
 }



More information about the Bf-blender-cvs mailing list