From a038f94ef1d35fad5a4b75b96cb58bb277660f01 Mon Sep 17 00:00:00 2001 From: Colin Marmond Date: Mon, 28 Aug 2023 10:30:33 +0200 Subject: [PATCH] Fix output nodes The node-tree does not necessarily contain an output node. --- .../editors/space_node/node_shader_preview.cc | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/source/blender/editors/space_node/node_shader_preview.cc b/source/blender/editors/space_node/node_shader_preview.cc index 8e5125ff948..8997489ab88 100644 --- a/source/blender/editors/space_node/node_shader_preview.cc +++ b/source/blender/editors/space_node/node_shader_preview.cc @@ -697,25 +697,24 @@ static void shader_preview_startjob(void *customdata, job_data->tree_previews->preview_size = U.node_preview_res; } + for (bNode *node_iter : job_data->mat_copy->nodetree->all_nodes()) { + if (node_iter->flag & NODE_DO_OUTPUT) { + node_iter->flag &= ~NODE_DO_OUTPUT; + bNodeSocket *disp_socket = nodeFindSocket(node_iter, SOCK_IN, "Displacement"); + if (disp_socket != nullptr && disp_socket->link != nullptr) { + job_data->mat_displacement_copy = std::make_pair(disp_socket->link->fromnode, + disp_socket->link->fromsock); + } + break; + } + } + /* Add a new output node used only for the previews. This is useful to keep the previously * connected links (for previewing the output nodes for example). */ job_data->mat_output_copy = nodeAddStaticNode( nullptr, job_data->mat_copy->nodetree, SH_NODE_OUTPUT_MATERIAL); - bNode *active_user_output_node = nullptr; - for (bNode *node_iter : job_data->mat_copy->nodetree->all_nodes()) { - if (node_iter->flag & NODE_DO_OUTPUT) { - node_iter->flag &= ~NODE_DO_OUTPUT; - active_user_output_node = node_iter; - } - } job_data->mat_output_copy->flag |= NODE_DO_OUTPUT; - bNodeSocket *disp_socket = nodeFindSocket(active_user_output_node, SOCK_IN, "Displacement"); - if (disp_socket != nullptr && disp_socket->link != nullptr) { - job_data->mat_displacement_copy = std::make_pair(disp_socket->link->fromnode, - disp_socket->link->fromsock); - } - bNodeTree *active_nodetree = job_data->treepath_copy.last()->nodetree; for (bNode *node : active_nodetree->all_nodes()) { if (!(node->flag & NODE_PREVIEW)) { -- 2.30.2