[Bf-blender-cvs] [fea726180d6] viewport-compositor: Viewport Compositor: Port Split Viewer node
Omar Emara
noreply at git.blender.org
Tue Dec 28 20:02:45 CET 2021
Commit: fea726180d61e914c523f0f574de3d9c0bb08e0e
Author: Omar Emara
Date: Sun Nov 14 13:53:20 2021 +0200
Branches: viewport-compositor
https://developer.blender.org/rBfea726180d61e914c523f0f574de3d9c0bb08e0e
Viewport Compositor: Port Split Viewer node
This patch ports the Split Viewer node to the viewport compositor.
===================================================================
M source/blender/gpu/CMakeLists.txt
M source/blender/gpu/intern/gpu_material_library.c
A source/blender/gpu/shaders/composite/gpu_shader_composite_split_viewer.glsl
M source/blender/nodes/composite/node_composite_tree.cc
M source/blender/nodes/composite/nodes/node_composite_splitViewer.cc
===================================================================
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index b7a57f85f52..976f8c78dd0 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -300,6 +300,7 @@ data_to_c_simple(shaders/composite/gpu_shader_composite_normal.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/composite/gpu_shader_composite_split_viewer.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 dd061934a4a..ec51c003741 100644
--- a/source/blender/gpu/intern/gpu_material_library.c
+++ b/source/blender/gpu/intern/gpu_material_library.c
@@ -66,6 +66,7 @@ extern char datatoc_gpu_shader_composite_normal_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_composite_split_viewer_glsl[];
extern char datatoc_gpu_shader_material_add_shader_glsl[];
extern char datatoc_gpu_shader_material_ambient_occlusion_glsl[];
@@ -276,6 +277,11 @@ static GPUMaterialLibrary gpu_shader_composite_set_alpha_library = {
.dependencies = {NULL},
};
+static GPUMaterialLibrary gpu_shader_composite_split_viewer_library = {
+ .code = datatoc_gpu_shader_composite_split_viewer_glsl,
+ .dependencies = {NULL},
+};
+
static GPUMaterialLibrary gpu_shader_material_noise_library = {
.code = datatoc_gpu_shader_material_noise_glsl,
.dependencies = {&gpu_shader_common_hash_library, NULL},
@@ -793,6 +799,7 @@ static GPUMaterialLibrary *gpu_material_libraries[] = {
&gpu_shader_composite_posterize_library,
&gpu_shader_composite_separate_combined_library,
&gpu_shader_composite_set_alpha_library,
+ &gpu_shader_composite_split_viewer_library,
NULL};
/* GLSL code parsing for finding function definitions.
diff --git a/source/blender/gpu/shaders/composite/gpu_shader_composite_split_viewer.glsl b/source/blender/gpu/shaders/composite/gpu_shader_composite_split_viewer.glsl
new file mode 100644
index 00000000000..34b90d8bf8f
--- /dev/null
+++ b/source/blender/gpu/shaders/composite/gpu_shader_composite_split_viewer.glsl
@@ -0,0 +1,15 @@
+void node_composite_split_viewer_x(vec4 first_color,
+ vec4 second_color,
+ float split_factor,
+ out vec4 result)
+{
+ result = g_data.uv_render_layer.x > split_factor ? first_color : second_color;
+}
+
+void node_composite_split_viewer_y(vec4 first_color,
+ vec4 second_color,
+ float split_factor,
+ out vec4 result)
+{
+ result = g_data.uv_render_layer.y > split_factor ? first_color : second_color;
+}
diff --git a/source/blender/nodes/composite/node_composite_tree.cc b/source/blender/nodes/composite/node_composite_tree.cc
index 73e13027c07..3e4fd941234 100644
--- a/source/blender/nodes/composite/node_composite_tree.cc
+++ b/source/blender/nodes/composite/node_composite_tree.cc
@@ -421,7 +421,7 @@ static bNode *ntreeCompositeViewportOutputNode(bNodeTree *ntree)
bNode *output_node = NULL;
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
- if (!ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_COMPOSITE)) {
+ if (!ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER, CMP_NODE_COMPOSITE)) {
continue;
}
diff --git a/source/blender/nodes/composite/nodes/node_composite_splitViewer.cc b/source/blender/nodes/composite/nodes/node_composite_splitViewer.cc
index 27fbb0fafd4..143caa7089c 100644
--- a/source/blender/nodes/composite/nodes/node_composite_splitViewer.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_splitViewer.cc
@@ -49,6 +49,22 @@ static void node_composit_init_splitviewer(bNodeTree *UNUSED(ntree), bNode *node
node->id = (ID *)BKE_image_ensure_viewer(G.main, IMA_TYPE_COMPOSITE, "Viewer Node");
}
+static int node_composit_gpu_splitviewer(GPUMaterial *mat,
+ bNode *node,
+ bNodeExecData *UNUSED(execdata),
+ GPUNodeStack *in,
+ GPUNodeStack *out)
+{
+ const float split_factor = node->custom1 / 100.0f;
+ const char *function_name = node->custom2 ? "node_composite_split_viewer_y" :
+ "node_composite_split_viewer_x";
+ GPUNodeLink *out_link;
+ GPU_stack_link(mat, node, function_name, in, out, GPU_uniform(&split_factor), &out_link);
+ GPU_material_output_surface(mat, out_link);
+
+ return true;
+}
+
void register_node_type_cmp_splitviewer(void)
{
static bNodeType ntype;
@@ -58,6 +74,7 @@ void register_node_type_cmp_splitviewer(void)
ntype.declare = blender::nodes::cmp_node_splitviewer_declare;
node_type_init(&ntype, node_composit_init_splitviewer);
node_type_storage(&ntype, "ImageUser", node_free_standard_storage, node_copy_standard_storage);
+ node_type_gpu(&ntype, node_composit_gpu_splitviewer);
/* Do not allow muting for this node. */
node_type_internal_links(&ntype, nullptr);
More information about the Bf-blender-cvs
mailing list