[Bf-blender-cvs] [6dc20450544] temp-field-visualization: cleanup
Jacques Lucke
noreply at git.blender.org
Mon Sep 20 18:15:42 CEST 2021
Commit: 6dc20450544ac77e225102ae2bca94e19aca7f01
Author: Jacques Lucke
Date: Mon Sep 20 17:18:39 2021 +0200
Branches: temp-field-visualization
https://developer.blender.org/rB6dc20450544ac77e225102ae2bca94e19aca7f01
cleanup
===================================================================
M source/blender/blenkernel/intern/node.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index a9f54eb46e6..9ef82591b52 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -4493,12 +4493,12 @@ static bool sockets_have_links(blender::Span<const SocketRef *> sockets)
return false;
}
-static Vector<int> get_linked_field_output_indices(const InputSocketRef &input_socket)
+static Vector<int> get_linked_field_input_indices(const OutputSocketRef &output_socket)
{
Vector<int> indices;
- for (const OutputSocketRef *output_socket : input_socket.node().outputs()) {
- if (is_field_socket_type((eNodeSocketDatatype)output_socket->typeinfo()->type)) {
- indices.append(output_socket->index());
+ for (const InputSocketRef *input_socket : output_socket.node().inputs()) {
+ if (is_field_socket_type((eNodeSocketDatatype)input_socket->typeinfo()->type)) {
+ indices.append(input_socket->index());
}
}
return indices;
@@ -4569,28 +4569,32 @@ static void update_socket_shapes_for_fields(bNodeTree &btree)
const bool node_is_adaptive = check_if_node_is_adaptive(*node);
for (const OutputSocketRef *output_socket : node->outputs()) {
- bool requires_single = false;
+ SocketFieldState &state = field_state_by_socket_id[output_socket->id()];
for (const InputSocketRef *target_socket : output_socket->directly_linked_sockets()) {
- requires_single |= field_state_by_socket_id[target_socket->id()].requires_single;
+ state.requires_single |= field_state_by_socket_id[target_socket->id()].requires_single;
+ }
+
+ if (state.requires_single) {
+ const Vector<int> input_socket_indices = get_linked_field_input_indices(*output_socket);
+ for (const int input_index : input_socket_indices) {
+ const InputSocketRef &input_socket = node->input(input_index);
+ field_state_by_socket_id[input_socket.id()].requires_single = true;
+ }
}
- field_state_by_socket_id[output_socket->id()].requires_single = requires_single;
}
for (const InputSocketRef *input_socket : node->inputs()) {
- const Vector<int> output_socket_indices = get_linked_field_output_indices(*input_socket);
- bool requires_single = false;
+ SocketFieldState &state = field_state_by_socket_id[input_socket->id()];
+ if (state.requires_single) {
+ continue;
+ }
if (node_decl != nullptr && !node_is_adaptive) {
const SocketDeclaration &socket_decl = *node_decl->inputs()[input_socket->index()];
- requires_single |= !socket_decl.is_field();
- }
- for (const int output_index : output_socket_indices) {
- const OutputSocketRef &output_socket = node->output(output_index);
- requires_single |= field_state_by_socket_id[output_socket.id()].requires_single;
+ state.requires_single |= !socket_decl.is_field();
}
if (!is_field_socket_type((eNodeSocketDatatype)input_socket->bsocket()->type)) {
- requires_single = true;
+ state.requires_single = true;
}
- field_state_by_socket_id[input_socket->id()].requires_single = requires_single;
}
}
@@ -4619,23 +4623,24 @@ static void update_socket_shapes_for_fields(bNodeTree &btree)
break;
}
}
-
- if (!state.is_single) {
- const Vector<int> output_socket_indices = get_linked_field_output_indices(*input_socket);
- for (const int output_index : output_socket_indices) {
- const OutputSocketRef &output_socket = node->output(output_index);
- field_state_by_socket_id[output_socket.id()].is_single = false;
- }
- }
}
for (const OutputSocketRef *output_socket : node->outputs()) {
+ SocketFieldState &state = field_state_by_socket_id[output_socket->id()];
if (node_decl != nullptr) {
const SocketDeclaration &socket_decl = *node_decl->outputs()[output_socket->index()];
if (socket_decl.is_field()) {
field_state_by_socket_id[output_socket->id()].is_single = false;
}
}
+ const Vector<int> input_socket_indices = get_linked_field_input_indices(*output_socket);
+ for (const int input_index : input_socket_indices) {
+ const InputSocketRef &input_socket = node->input(input_index);
+ if (!field_state_by_socket_id[input_socket.id()].is_single) {
+ state.is_single = false;
+ break;
+ }
+ }
}
}
More information about the Bf-blender-cvs
mailing list