[Bf-blender-cvs] [9d0700196b4] viewport-compositor: Viewport Compositor: Port Hue Saturation Value node

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


Commit: 9d0700196b4ee6253aea10f8cef27c1ba4346dbd
Author: Omar Emara
Date:   Thu Nov 4 13:42:47 2021 +0200
Branches: viewport-compositor
https://developer.blender.org/rB9d0700196b4ee6253aea10f8cef27c1ba4346dbd

Viewport Compositor: Port Hue Saturation Value node

This patch ports the Hue Saturation Value 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_hue_saturation_value.glsl
M	source/blender/nodes/composite/nodes/node_composite_hueSatVal.cc

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

diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index 836125c1f0d..36766b34b92 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_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)
 data_to_c_simple(shaders/composite/gpu_shader_composite_hue_correct.glsl SRC)
+data_to_c_simple(shaders/composite/gpu_shader_composite_hue_saturation_value.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_image.glsl SRC)
 data_to_c_simple(shaders/composite/gpu_shader_composite_invert.glsl SRC)
 
diff --git a/source/blender/gpu/intern/gpu_material_library.c b/source/blender/gpu/intern/gpu_material_library.c
index 7bb6d4f1a43..3d734b801b3 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_composite_glsl[];
 extern char datatoc_gpu_shader_composite_exposure_glsl[];
 extern char datatoc_gpu_shader_composite_gamma_glsl[];
 extern char datatoc_gpu_shader_composite_hue_correct_glsl[];
+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[];
 
@@ -205,6 +206,11 @@ static GPUMaterialLibrary gpu_shader_composite_hue_correct_library = {
     .dependencies = {&gpu_shader_common_color_util_library, NULL},
 };
 
+static GPUMaterialLibrary gpu_shader_composite_hue_saturation_value_library = {
+    .code = datatoc_gpu_shader_composite_hue_saturation_value_glsl,
+    .dependencies = {&gpu_shader_common_color_util_library, NULL},
+};
+
 static GPUMaterialLibrary gpu_shader_composite_image_library = {
     .code = datatoc_gpu_shader_composite_image_glsl,
     .dependencies = {NULL},
@@ -749,6 +755,7 @@ static GPUMaterialLibrary *gpu_material_libraries[] = {
     &gpu_shader_composite_exposure_library,
     &gpu_shader_composite_gamma_library,
     &gpu_shader_composite_hue_correct_library,
+    &gpu_shader_composite_hue_saturation_value_library,
     &gpu_shader_composite_image_library,
     &gpu_shader_composite_invert_library,
     NULL};
diff --git a/source/blender/gpu/shaders/composite/gpu_shader_composite_hue_saturation_value.glsl b/source/blender/gpu/shaders/composite/gpu_shader_composite_hue_saturation_value.glsl
new file mode 100644
index 00000000000..e36a501f73e
--- /dev/null
+++ b/source/blender/gpu/shaders/composite/gpu_shader_composite_hue_saturation_value.glsl
@@ -0,0 +1,14 @@
+void node_composite_hue_saturation_value(
+    vec4 color, float hue, float saturation, float value, float factor, out vec4 result)
+{
+  vec4 hsv;
+  rgb_to_hsv(color, hsv);
+
+  hsv.x = fract(hsv.x + hue + 0.5);
+  hsv.y = clamp(hsv.y * saturation, 0.0, 1.0);
+  hsv.z = hsv.z * value;
+
+  hsv_to_rgb(hsv, result);
+
+  result = mix(color, result, factor);
+}
diff --git a/source/blender/nodes/composite/nodes/node_composite_hueSatVal.cc b/source/blender/nodes/composite/nodes/node_composite_hueSatVal.cc
index 07746918a94..8df7964fe5f 100644
--- a/source/blender/nodes/composite/nodes/node_composite_hueSatVal.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_hueSatVal.cc
@@ -43,12 +43,22 @@ static void cmp_node_huesatval_declare(NodeDeclarationBuilder &b)
 
 }  // namespace blender::nodes
 
+static int node_composite_gpu_hue_saturation_value(GPUMaterial *mat,
+                                                   bNode *node,
+                                                   bNodeExecData *UNUSED(execdata),
+                                                   GPUNodeStack *in,
+                                                   GPUNodeStack *out)
+{
+  return GPU_stack_link(mat, node, "node_composite_hue_saturation_value", in, out);
+}
+
 void register_node_type_cmp_hue_sat(void)
 {
   static bNodeType ntype;
 
   cmp_node_type_base(&ntype, CMP_NODE_HUE_SAT, "Hue Saturation Value", NODE_CLASS_OP_COLOR, 0);
   ntype.declare = blender::nodes::cmp_node_huesatval_declare;
+  node_type_gpu(&ntype, node_composite_gpu_hue_saturation_value);
 
   nodeRegisterType(&ntype);
 }



More information about the Bf-blender-cvs mailing list