[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