diff options
author | Jacques Lucke <jacques@blender.org> | 2022-05-31 21:44:56 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2022-05-31 21:44:56 +0300 |
commit | b9f29a0f645de693c37174747ece2baba496c899 (patch) | |
tree | f52b038e0bcb7db002cd000dc8f27f5902d47acf /source/blender/nodes | |
parent | 5c80bcf8c2fbd1e3c71ef5169f59e0b95c4db153 (diff) | |
parent | 0f47506cde50c4542a0a3c7863b0fb4e735bf8f0 (diff) |
Merge branch 'blender-v3.2-release'
Diffstat (limited to 'source/blender/nodes')
-rw-r--r-- | source/blender/nodes/intern/node_common.cc | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/source/blender/nodes/intern/node_common.cc b/source/blender/nodes/intern/node_common.cc index abbfe4b823d..b7c5f9570e4 100644 --- a/source/blender/nodes/intern/node_common.cc +++ b/source/blender/nodes/intern/node_common.cc @@ -156,7 +156,8 @@ static void group_verify_socket_list(bNodeTree &node_tree, bNode &node, const ListBase &interface_sockets, ListBase &verify_lb, - const eNodeSocketInOut in_out) + const eNodeSocketInOut in_out, + const bool ensure_extend_socket_exists) { ListBase old_sockets = verify_lb; BLI_listbase_clear(&verify_lb); @@ -177,6 +178,17 @@ static void group_verify_socket_list(bNodeTree &node_tree, } } + if (ensure_extend_socket_exists) { + bNodeSocket *last_socket = static_cast<bNodeSocket *>(old_sockets.last); + if (last_socket != nullptr && STREQ(last_socket->identifier, "__extend__")) { + BLI_remlink(&old_sockets, last_socket); + BLI_addtail(&verify_lb, last_socket); + } + else { + nodeAddSocket(&node_tree, &node, in_out, "NodeSocketVirtual", "__extend__", ""); + } + } + /* Remove leftover sockets that didn't match the node group's interface. */ LISTBASE_FOREACH_MUTABLE (bNodeSocket *, unused_socket, &old_sockets) { nodeRemoveSocket(&node_tree, &node, unused_socket); @@ -195,8 +207,8 @@ void node_group_update(struct bNodeTree *ntree, struct bNode *node) } else { bNodeTree *ngroup = (bNodeTree *)node->id; - group_verify_socket_list(*ntree, *node, ngroup->inputs, node->inputs, SOCK_IN); - group_verify_socket_list(*ntree, *node, ngroup->outputs, node->outputs, SOCK_OUT); + group_verify_socket_list(*ntree, *node, ngroup->inputs, node->inputs, SOCK_IN, false); + group_verify_socket_list(*ntree, *node, ngroup->outputs, node->outputs, SOCK_OUT, false); } } @@ -484,15 +496,7 @@ void node_group_input_update(bNodeTree *ntree, bNode *node) } BLI_freelistN(&tmplinks); - - /* check inputs and outputs, and remove or insert them */ - { - /* value_in_out inverted for interface nodes to get correct socket value_property */ - group_verify_socket_list(*ntree, *node, ntree->inputs, node->outputs, SOCK_OUT); - - /* add virtual extension socket */ - nodeAddSocket(ntree, node, SOCK_OUT, "NodeSocketVirtual", "__extend__", ""); - } + group_verify_socket_list(*ntree, *node, ntree->inputs, node->outputs, SOCK_OUT, true); } void register_node_type_group_input() @@ -582,15 +586,7 @@ void node_group_output_update(bNodeTree *ntree, bNode *node) } BLI_freelistN(&tmplinks); - - /* check inputs and outputs, and remove or insert them */ - { - /* value_in_out inverted for interface nodes to get correct socket value_property */ - group_verify_socket_list(*ntree, *node, ntree->outputs, node->inputs, SOCK_IN); - - /* add virtual extension socket */ - nodeAddSocket(ntree, node, SOCK_IN, "NodeSocketVirtual", "__extend__", ""); - } + group_verify_socket_list(*ntree, *node, ntree->outputs, node->inputs, SOCK_IN, true); } void register_node_type_group_output() |