From df6e65dd93ea4a4d36a6dddc164407bcf2266740 Mon Sep 17 00:00:00 2001 From: Habib Gahbiche Date: Thu, 15 May 2025 16:08:19 +0200 Subject: [PATCH] Compositor: add viewer node to the default node tree Users almost always need a viewer node, so add one to the default node tree. Note that the backdrop is already enabled by default, so the backdrop image will be visible as soon as a render is available (no need to manually add viewer node or click `cltr+shift+LMB` to show a backdrop image. Pull Request: https://projects.blender.org/blender/blender/pulls/138890 --- .../blender/editors/space_node/node_edit.cc | 37 +++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/space_node/node_edit.cc b/source/blender/editors/space_node/node_edit.cc index 1530a5db29b..d5a1ce9c266 100644 --- a/source/blender/editors/space_node/node_edit.cc +++ b/source/blender/editors/space_node/node_edit.cc @@ -653,19 +653,42 @@ void ED_node_composit_default(const bContext *C, Scene *sce) sce->nodetree = blender::bke::node_tree_add_tree_embedded( nullptr, &sce->id, "Compositing Nodetree", ntreeType_Composite->idname); - bNode *out = blender::bke::node_add_static_node(C, *sce->nodetree, CMP_NODE_COMPOSITE); - out->location[0] = 200.0f; - out->location[1] = 0.0f; + bNode *composite = blender::bke::node_add_static_node(C, *sce->nodetree, CMP_NODE_COMPOSITE); + composite->location[0] = 200.0f; + composite->location[1] = 0.0f; bNode *in = blender::bke::node_add_static_node(C, *sce->nodetree, CMP_NODE_R_LAYERS); in->location[0] = -150.0f - in->width; in->location[1] = 0.0f; blender::bke::node_set_active(*sce->nodetree, *in); - /* Links from color to color. */ - bNodeSocket *fromsock = (bNodeSocket *)in->outputs.first; - bNodeSocket *tosock = (bNodeSocket *)out->inputs.first; - blender::bke::node_add_link(*sce->nodetree, *in, *fromsock, *out, *tosock); + bNode *reroute = blender::bke::node_add_static_node(C, *sce->nodetree, NODE_REROUTE); + reroute->location[0] = 100.0f; + reroute->location[1] = -35.0f; + + bNode *viewer = blender::bke::node_add_static_node(C, *sce->nodetree, CMP_NODE_VIEWER); + viewer->location[0] = 200.0f; + viewer->location[1] = -60.0f; + + /* Viewer and Composite nodes are linked to Render Layer's output image socket through a reroute + * node. */ + blender::bke::node_add_link(*sce->nodetree, + *in, + *(bNodeSocket *)in->outputs.first, + *reroute, + *(bNodeSocket *)reroute->inputs.first); + + blender::bke::node_add_link(*sce->nodetree, + *reroute, + *(bNodeSocket *)reroute->outputs.first, + *composite, + *(bNodeSocket *)composite->inputs.first); + + blender::bke::node_add_link(*sce->nodetree, + *reroute, + *(bNodeSocket *)reroute->outputs.first, + *viewer, + *(bNodeSocket *)viewer->inputs.first); BKE_ntree_update_after_single_tree_change(*CTX_data_main(C), *sce->nodetree); }