Commit: 37593cdf6d3a973215afb447e6fbf239da0985cd
Author: Omar Emara
Date:   Thu Nov 4 19:18:24 2021 +0200
Branches: viewport-compositor
https://developer.blender.org/rB37593cdf6d3a973215afb447e6fbf239da0985cd

Viewport Compositor: Port Posterize node

This patch ports the Posterize 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_posterize.glsl
M       source/blender/nodes/composite/nodes/node_composite_posterize.cc

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

diff --git a/source/blender/gpu/CMakeLists.txt 
b/source/blender/gpu/CMakeLists.txt
index 683cb8225ee..932ceecf464 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -291,6 +291,7 @@ 
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)
+data_to_c_simple(shaders/composite/gpu_shader_composite_posterize.glsl SRC)
 
 data_to_c_simple(shaders/material/gpu_shader_material_add_shader.glsl SRC)
 data_to_c_simple(shaders/material/gpu_shader_material_ambient_occlusion.glsl 
SRC)
diff --git a/source/blender/gpu/intern/gpu_material_library.c 
b/source/blender/gpu/intern/gpu_material_library.c
index 967e04543db..1beb281d79b 100644
--- a/source/blender/gpu/intern/gpu_material_library.c
+++ b/source/blender/gpu/intern/gpu_material_library.c
@@ -57,6 +57,7 @@ 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[];
+extern char datatoc_gpu_shader_composite_posterize_glsl[];
 
 extern char datatoc_gpu_shader_material_add_shader_glsl[];
 extern char datatoc_gpu_shader_material_ambient_occlusion_glsl[];
@@ -226,6 +227,11 @@ static GPUMaterialLibrary 
gpu_shader_composite_invert_library = {
     .dependencies = {NULL},
 };
 
+static GPUMaterialLibrary gpu_shader_composite_posterize_library = {
+    .code = datatoc_gpu_shader_composite_posterize_glsl,
+    .dependencies = {NULL},
+};
+
 static GPUMaterialLibrary gpu_shader_material_noise_library = {
     .code = datatoc_gpu_shader_material_noise_glsl,
     .dependencies = {&gpu_shader_common_hash_library, NULL},
@@ -758,6 +764,7 @@ static GPUMaterialLibrary *gpu_material_libraries[] = {
     &gpu_shader_composite_hue_saturation_value_library,
     &gpu_shader_composite_image_library,
     &gpu_shader_composite_invert_library,
+    &gpu_shader_composite_posterize_library,
     NULL};
 
 /* GLSL code parsing for finding function definitions.
diff --git 
a/source/blender/gpu/shaders/composite/gpu_shader_composite_posterize.glsl 
b/source/blender/gpu/shaders/composite/gpu_shader_composite_posterize.glsl
new file mode 100644
index 00000000000..ee8ae234abe
--- /dev/null
+++ b/source/blender/gpu/shaders/composite/gpu_shader_composite_posterize.glsl
@@ -0,0 +1,6 @@
+void node_composite_posterize(vec4 color, float steps, out vec4 result)
+{
+  steps = clamp(steps, 2.0, 1024.0);
+  result = floor(color * steps) / steps;
+  result.a = color.a;
+}
diff --git a/source/blender/nodes/composite/nodes/node_composite_posterize.cc 
b/source/blender/nodes/composite/nodes/node_composite_posterize.cc
index 45a98e68b4b..5d0b2e06e9c 100644
--- a/source/blender/nodes/composite/nodes/node_composite_posterize.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_posterize.cc
@@ -35,12 +35,22 @@ static bNodeSocketTemplate cmp_node_posterize_out[] = {
     {-1, ""},
 };
 
+static int node_composite_gpu_posterize(GPUMaterial *mat,
+                                        bNode *node,
+                                        bNodeExecData *UNUSED(execdata),
+                                        GPUNodeStack *in,
+                                        GPUNodeStack *out)
+{
+  return GPU_stack_link(mat, node, "node_composite_posterize", in, out);
+}
+
 void register_node_type_cmp_posterize(void)
 {
   static bNodeType ntype;
 
   cmp_node_type_base(&ntype, CMP_NODE_POSTERIZE, "Posterize", 
NODE_CLASS_OP_COLOR, 0);
   node_type_socket_templates(&ntype, cmp_node_posterize_in, 
cmp_node_posterize_out);
+  node_type_gpu(&ntype, node_composite_gpu_posterize);
 
   nodeRegisterType(&ntype);
 }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to