From 486d200783f3307db4bfb26db3a82044f321f821 Mon Sep 17 00:00:00 2001 From: illua1 Date: Sat, 29 Apr 2023 13:27:26 +0300 Subject: [PATCH] init --- source/blender/blenkernel/intern/node.cc | 57 ++++++++++++++---------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 364b6635b0d..a85178ccf1f 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -2426,6 +2426,27 @@ bNode *node_copy_with_mapping(bNodeTree *dst_tree, return node_dst; } +/** + * Type of value storage related with socket is the same. + * \param socket: Node can have multiple sockets & storages pairs. + */ +void **node_static_value_storage_for(bNode &node, const bNodeSocket &socket) +{ + if (!socket.is_output()) { + return nullptr; + } + + switch (node.type) { + case GEO_NODE_IMAGE: { + return reinterpret_cast(&node.id); + } + default: + break; + } + + return nullptr; +} + void node_socket_move_default_value(Main & /*bmain*/, bNodeTree &tree, bNodeSocket &src, @@ -2449,25 +2470,16 @@ void node_socket_move_default_value(Main & /*bmain*/, return; } - ID **src_socket_value = nullptr; - Vector dst_values; + void **src_socket_value = nullptr; + void **dst_value = node_static_value_storage_for(dst_node, dst); + if (dst_value == nullptr) { + return; + } + switch (dst.type) { case SOCK_IMAGE: { Image **tmp_socket_value = &src.default_value_typed()->value; - src_socket_value = reinterpret_cast(tmp_socket_value); - if (*src_socket_value == nullptr) { - break; - } - - switch (dst_node.type) { - case GEO_NODE_IMAGE: { - dst_values.append(&dst_node.id); - break; - } - default: { - break; - } - } + src_socket_value = reinterpret_cast(tmp_socket_value); break; } case SOCK_CUSTOM: @@ -2481,17 +2493,14 @@ void node_socket_move_default_value(Main & /*bmain*/, } } - if (dst_values.is_empty() || src_socket_value == nullptr) { + if (src_socket_value == nullptr) { return; } - for (ID **dst_value : dst_values) { - *dst_value = *src_socket_value; - id_us_plus(*dst_value); - } - - id_us_min(*src_socket_value); - *src_socket_value = nullptr; + ID **src_id = reinterpret_cast(src_socket_value); + ID **dst_id = reinterpret_cast(dst_value); + *dst_id = *src_id; + *src_id = nullptr; } bNode *node_copy(bNodeTree *dst_tree, const bNode &src_node, const int flag, const bool use_unique) -- 2.30.2