[Bf-blender-cvs] [03775f2b922] viewport-compositor: Viewport Compositor: Port Set Alpha node
Omar Emara
noreply at git.blender.org
Tue Dec 28 20:02:44 CET 2021
Commit: 03775f2b9224bf23c0066b5b301b2813d49d3918
Author: Omar Emara
Date: Sat Nov 13 17:53:55 2021 +0200
Branches: viewport-compositor
https://developer.blender.org/rB03775f2b9224bf23c0066b5b301b2813d49d3918
Viewport Compositor: Port Set Alpha node
This patch ports the Set Alpha 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_set_alpha.glsl
M source/blender/nodes/composite/nodes/node_composite_setalpha.cc
===================================================================
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index 23d04d35f54..2a8312fc201 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -297,6 +297,7 @@ 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/composite/gpu_shader_composite_separate_combine.glsl SRC)
+data_to_c_simple(shaders/composite/gpu_shader_composite_set_alpha.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 47b911cc908..eac7c8060d5 100644
--- a/source/blender/gpu/intern/gpu_material_library.c
+++ b/source/blender/gpu/intern/gpu_material_library.c
@@ -63,6 +63,7 @@ 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_composite_separate_combine_glsl[];
+extern char datatoc_gpu_shader_composite_set_alpha_glsl[];
extern char datatoc_gpu_shader_material_add_shader_glsl[];
extern char datatoc_gpu_shader_material_ambient_occlusion_glsl[];
@@ -258,6 +259,11 @@ static GPUMaterialLibrary gpu_shader_composite_separate_combined_library = {
.dependencies = {&gpu_shader_common_color_util_library, NULL},
};
+static GPUMaterialLibrary gpu_shader_composite_set_alpha_library = {
+ .code = datatoc_gpu_shader_composite_set_alpha_glsl,
+ .dependencies = {NULL},
+};
+
static GPUMaterialLibrary gpu_shader_material_noise_library = {
.code = datatoc_gpu_shader_material_noise_glsl,
.dependencies = {&gpu_shader_common_hash_library, NULL},
@@ -772,6 +778,7 @@ static GPUMaterialLibrary *gpu_material_libraries[] = {
&gpu_shader_composite_invert_library,
&gpu_shader_composite_posterize_library,
&gpu_shader_composite_separate_combined_library,
+ &gpu_shader_composite_set_alpha_library,
NULL};
/* GLSL code parsing for finding function definitions.
diff --git a/source/blender/gpu/shaders/composite/gpu_shader_composite_set_alpha.glsl b/source/blender/gpu/shaders/composite/gpu_shader_composite_set_alpha.glsl
new file mode 100644
index 00000000000..95380d1ed0f
--- /dev/null
+++ b/source/blender/gpu/shaders/composite/gpu_shader_composite_set_alpha.glsl
@@ -0,0 +1,9 @@
+void node_composite_set_alpha_apply(vec4 color, float alpha, out vec4 result)
+{
+ result = color * alpha;
+}
+
+void node_composite_set_alpha_replace(vec4 color, float alpha, out vec4 result)
+{
+ result = vec4(color.rgb, alpha);
+}
diff --git a/source/blender/nodes/composite/nodes/node_composite_setalpha.cc b/source/blender/nodes/composite/nodes/node_composite_setalpha.cc
index a2089bd0913..455a842abdc 100644
--- a/source/blender/nodes/composite/nodes/node_composite_setalpha.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_setalpha.cc
@@ -41,6 +41,21 @@ static void node_composit_init_setalpha(bNodeTree *UNUSED(ntree), bNode *node)
settings->mode = CMP_NODE_SETALPHA_MODE_APPLY;
}
+static int node_composite_gpu_set_alpha(GPUMaterial *mat,
+ bNode *node,
+ bNodeExecData *UNUSED(execdata),
+ GPUNodeStack *in,
+ GPUNodeStack *out)
+{
+ const NodeSetAlpha *settings = (NodeSetAlpha *)node->storage;
+
+ if (settings->mode == CMP_NODE_SETALPHA_MODE_APPLY) {
+ return GPU_stack_link(mat, node, "node_composite_set_alpha_apply", in, out);
+ }
+
+ return GPU_stack_link(mat, node, "node_composite_set_alpha_replace", in, out);
+}
+
void register_node_type_cmp_setalpha(void)
{
static bNodeType ntype;
@@ -50,6 +65,7 @@ void register_node_type_cmp_setalpha(void)
node_type_init(&ntype, node_composit_init_setalpha);
node_type_storage(
&ntype, "NodeSetAlpha", node_free_standard_storage, node_copy_standard_storage);
+ node_type_gpu(&ntype, node_composite_gpu_set_alpha);
nodeRegisterType(&ntype);
}
More information about the Bf-blender-cvs
mailing list