[Bf-blender-cvs] [7fd6c7f3718] master: Fix T86204: support multiple group inputs in node group
Jacques Lucke
noreply at git.blender.org
Thu Mar 4 12:50:32 CET 2021
Commit: 7fd6c7f3718a1a7db5924366d5f8f2d03902bf74
Author: Jacques Lucke
Date: Thu Mar 4 12:50:23 2021 +0100
Branches: master
https://developer.blender.org/rB7fd6c7f3718a1a7db5924366d5f8f2d03902bf74
Fix T86204: support multiple group inputs in node group
Note that this still does not work when in the node group directly referenced
by the modifier, only in sub-node-groups. This limitation will be removed
at some point.
===================================================================
M source/blender/nodes/intern/derived_node_tree.cc
===================================================================
diff --git a/source/blender/nodes/intern/derived_node_tree.cc b/source/blender/nodes/intern/derived_node_tree.cc
index f5a0e14f18b..7934104f84b 100644
--- a/source/blender/nodes/intern/derived_node_tree.cc
+++ b/source/blender/nodes/intern/derived_node_tree.cc
@@ -187,16 +187,11 @@ BLI_NOINLINE void DerivedNodeTree::relink_group_inputs(const NodeTreeRef &group_
if (node_refs.size() == 0) {
return;
}
- /* TODO: Pick correct group input node if there are more than one. */
- const NodeRef &input_node_ref = *node_refs[0];
- DNode &input_node = *nodes_by_id[input_node_ref.id()];
int input_amount = group_node.inputs().size();
- BLI_assert(input_amount == input_node_ref.outputs().size() - 1);
for (int input_index : IndexRange(input_amount)) {
DInputSocket *outside_group = group_node.inputs_[input_index];
- DOutputSocket *inside_group = input_node.outputs_[input_index];
for (DOutputSocket *outside_connected : outside_group->linked_sockets_) {
outside_connected->linked_sockets_.remove_first_occurrence_and_reorder(outside_group);
@@ -206,21 +201,27 @@ BLI_NOINLINE void DerivedNodeTree::relink_group_inputs(const NodeTreeRef &group_
outside_connected->linked_sockets_.remove_first_occurrence_and_reorder(outside_group);
}
- for (DInputSocket *inside_connected : inside_group->linked_sockets_) {
- inside_connected->linked_sockets_.remove_first_occurrence_and_reorder(inside_group);
+ for (const NodeRef *input_node_ref : node_refs) {
+ DNode &input_node = *nodes_by_id[input_node_ref->id()];
+ DOutputSocket *inside_group = input_node.outputs_[input_index];
- for (DOutputSocket *outside_connected : outside_group->linked_sockets_) {
- inside_connected->linked_sockets_.append(outside_connected);
- outside_connected->linked_sockets_.append(inside_connected);
- }
+ for (DInputSocket *inside_connected : inside_group->linked_sockets_) {
+ inside_connected->linked_sockets_.remove_first_occurrence_and_reorder(inside_group);
- for (DGroupInput *outside_connected : outside_group->linked_group_inputs_) {
- inside_connected->linked_group_inputs_.append(outside_connected);
- outside_connected->linked_sockets_.append(inside_connected);
+ for (DOutputSocket *outside_connected : outside_group->linked_sockets_) {
+ inside_connected->linked_sockets_.append(outside_connected);
+ outside_connected->linked_sockets_.append(inside_connected);
+ }
+
+ for (DGroupInput *outside_connected : outside_group->linked_group_inputs_) {
+ inside_connected->linked_group_inputs_.append(outside_connected);
+ outside_connected->linked_sockets_.append(inside_connected);
+ }
}
+
+ inside_group->linked_sockets_.clear();
}
- inside_group->linked_sockets_.clear();
outside_group->linked_sockets_.clear();
outside_group->linked_group_inputs_.clear();
}
More information about the Bf-blender-cvs
mailing list