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); _______________________________________________ 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