Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2021-03-04 18:55:44 +0300
committerJacques Lucke <jacques@blender.org>2021-03-04 18:55:44 +0300
commit49049a3e6fc63aae49fdbdff36c61d96b9a91b6f (patch)
treeca675a5ffd090077b196200f3542d6eea0499918
parentee5952cf118a256ee3d5da8e454651b840c3d50e (diff)
simplify getting input values for socket
-rw-r--r--source/blender/modifiers/intern/MOD_nodes.cc43
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)};
}