diff options
author | Jacques Lucke <jacques@blender.org> | 2021-03-04 14:50:23 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-03-04 14:50:23 +0300 |
commit | 7fd6c7f3718a1a7db5924366d5f8f2d03902bf74 (patch) | |
tree | f01680bfe3c737ed709d05b4fa7a087ce7c382ae /source/blender | |
parent | bda95ac0f94d7df787d720f7176a573c7faa370b (diff) |
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.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/nodes/intern/derived_node_tree.cc | 31 |
1 files changed, 16 insertions, 15 deletions
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(); } |