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