diff options
author | Jacques Lucke <jacques@blender.org> | 2021-03-04 18:55:44 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-03-04 18:55:44 +0300 |
commit | 49049a3e6fc63aae49fdbdff36c61d96b9a91b6f (patch) | |
tree | ca675a5ffd090077b196200f3542d6eea0499918 | |
parent | ee5952cf118a256ee3d5da8e454651b840c3d50e (diff) |
simplify getting input values for socket
-rw-r--r-- | source/blender/modifiers/intern/MOD_nodes.cc | 43 |
1 files changed, 17 insertions, 26 deletions
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index 5f48466ba07..df1c1032d89 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -306,41 +306,30 @@ class GeometryNodesEvaluator { socket_to_compute.foreach_origin_socket( [&](XXXSocket socket) { from_sockets.append(socket); }); - const CPPType &type = *blender::nodes::socket_cpp_type_get(*socket_to_compute->typeinfo()); - - if (from_sockets.is_empty()) { - /* The input is not connected, use the value from the socket itself. */ - return {get_unlinked_input_value(socket_to_compute, type)}; - } - /* Multi-input sockets contain a vector of inputs. */ if (socket_to_compute->is_multi_input_socket()) { Vector<GMutablePointer> values; for (const XXXSocket from_socket : from_sockets) { - if (from_socket->is_output()) { - XXXOutputSocket from_output_socket{from_socket}; - const std::pair<XXXInputSocket, XXXOutputSocket> key = std::make_pair( - socket_to_compute, from_output_socket); - std::optional<GMutablePointer> value = value_by_input_.pop_try(key); - if (value.has_value()) { - values.append(*value); - } - else { - this->compute_output_and_forward(from_output_socket); - GMutablePointer value = value_by_input_.pop(key); - values.append(value); - } - } - else { - XXXInputSocket from_input_socket{from_socket}; - GMutablePointer value = get_unlinked_input_value(from_input_socket, type); - values.append(value); - } + GMutablePointer value = get_input_from_incoming_link(socket_to_compute, from_socket); + values.append(value); } return values; } + if (from_sockets.is_empty()) { + /* The input is not connected, use the value from the socket itself. */ + const CPPType &type = *blender::nodes::socket_cpp_type_get(*socket_to_compute->typeinfo()); + return {get_unlinked_input_value(socket_to_compute, type)}; + } + const XXXSocket from_socket = from_sockets[0]; + GMutablePointer value = this->get_input_from_incoming_link(socket_to_compute, from_socket); + return {value}; + } + + GMutablePointer get_input_from_incoming_link(const XXXInputSocket socket_to_compute, + const XXXSocket from_socket) + { if (from_socket->is_output()) { const XXXOutputSocket from_output_socket{from_socket}; const std::pair<XXXInputSocket, XXXOutputSocket> key = std::make_pair(socket_to_compute, @@ -356,6 +345,8 @@ class GeometryNodesEvaluator { return {value_by_input_.pop(key)}; } + /* Get value from an unlinked input socket. */ + const CPPType &type = *blender::nodes::socket_cpp_type_get(*socket_to_compute->typeinfo()); const XXXInputSocket from_input_socket{from_socket}; return {get_unlinked_input_value(from_input_socket, type)}; } |