[Bf-blender-cvs] [a57e050f43c] functions: cleanup creation of group input nodes

Jacques Lucke noreply at git.blender.org
Sat Nov 30 16:40:04 CET 2019


Commit: a57e050f43c366ab0927476059a54eadf78e137a
Author: Jacques Lucke
Date:   Wed Nov 27 15:46:10 2019 +0100
Branches: functions
https://developer.blender.org/rBa57e050f43c366ab0927476059a54eadf78e137a

cleanup creation of group input nodes

===================================================================

M	source/blender/blenkernel/BKE_inlined_node_tree.h
M	source/blender/blenkernel/intern/inlined_node_tree.cc

===================================================================

diff --git a/source/blender/blenkernel/BKE_inlined_node_tree.h b/source/blender/blenkernel/BKE_inlined_node_tree.h
index ba0935bc359..40bc039b7b7 100644
--- a/source/blender/blenkernel/BKE_inlined_node_tree.h
+++ b/source/blender/blenkernel/BKE_inlined_node_tree.h
@@ -167,6 +167,7 @@ class InlinedNodeTree : BLI::NonCopyable, BLI::NonMovable {
   ArrayRef<const XNode *> all_nodes() const;
   ArrayRef<const XInputSocket *> all_input_sockets() const;
   ArrayRef<const XOutputSocket *> all_output_sockets() const;
+  ArrayRef<const XGroupInput *> all_group_inputs() const;
   ArrayRef<const XNode *> nodes_with_idname(StringRef idname) const;
 
  private:
@@ -179,9 +180,10 @@ class InlinedNodeTree : BLI::NonCopyable, BLI::NonMovable {
                          Vector<XGroupInput *> &all_group_inputs,
                          Vector<XParentNode *> &all_parent_nodes,
                          BTreeVTreeMap &vtrees);
+  void expand_group__group_inputs_for_unlinked_inputs(XNode &group_node,
+                                                      Vector<XGroupInput *> &all_group_inputs);
   void expand_group__relink_inputs(const VirtualNodeTree &vtree,
                                    ArrayRef<XNode *> new_xnodes_by_id,
-                                   Vector<XGroupInput *> &all_group_inputs,
                                    XNode &group_node);
   void expand_group__relink_outputs(const VirtualNodeTree &vtree,
                                     ArrayRef<XNode *> new_xnodes_by_id,
@@ -417,6 +419,11 @@ inline ArrayRef<const XOutputSocket *> InlinedNodeTree::all_output_sockets() con
   return m_output_sockets.as_ref();
 }
 
+inline ArrayRef<const XGroupInput *> InlinedNodeTree::all_group_inputs() const
+{
+  return m_group_inputs.as_ref();
+}
+
 inline ArrayRef<const XNode *> InlinedNodeTree::nodes_with_idname(StringRef idname) const
 {
   auto *nodes = m_nodes_by_idname.lookup_ptr(idname);
diff --git a/source/blender/blenkernel/intern/inlined_node_tree.cc b/source/blender/blenkernel/intern/inlined_node_tree.cc
index aefca7e8546..d183154dfb8 100644
--- a/source/blender/blenkernel/intern/inlined_node_tree.cc
+++ b/source/blender/blenkernel/intern/inlined_node_tree.cc
@@ -155,15 +155,31 @@ BLI_NOINLINE void InlinedNodeTree::expand_group_node(XNode &group_node,
 
   this->insert_linked_nodes_for_vtree_in_id_order(vtree, all_nodes, &sub_parent);
   ArrayRef<XNode *> new_xnodes_by_id = all_nodes.as_ref().take_back(vtree.nodes().size());
-  this->expand_group__relink_inputs(vtree, new_xnodes_by_id, all_group_inputs, group_node);
+
+  this->expand_group__group_inputs_for_unlinked_inputs(group_node, all_group_inputs);
+  this->expand_group__relink_inputs(vtree, new_xnodes_by_id, group_node);
   this->expand_group__relink_outputs(vtree, new_xnodes_by_id, group_node);
 }
 
-BLI_NOINLINE void InlinedNodeTree::expand_group__relink_inputs(
-    const VirtualNodeTree &vtree,
-    ArrayRef<XNode *> new_xnodes_by_id,
-    Vector<XGroupInput *> &all_group_inputs,
-    XNode &group_node)
+BLI_NOINLINE void InlinedNodeTree::expand_group__group_inputs_for_unlinked_inputs(
+    XNode &group_node, Vector<XGroupInput *> &all_group_inputs)
+{
+  for (XInputSocket *input_socket : group_node.m_inputs) {
+    if (!input_socket->is_linked()) {
+      XGroupInput &group_input = *m_allocator.construct<XGroupInput>().release();
+      group_input.m_id = all_group_inputs.append_and_get_index(&group_input);
+      group_input.m_vsocket = &input_socket->m_vsocket->as_input();
+      group_input.m_parent = group_node.m_parent;
+
+      group_input.m_linked_sockets.append(input_socket);
+      input_socket->m_linked_group_inputs.append(&group_input);
+    }
+  }
+}
+
+BLI_NOINLINE void InlinedNodeTree::expand_group__relink_inputs(const VirtualNodeTree &vtree,
+                                                               ArrayRef<XNode *> new_xnodes_by_id,
+                                                               XNode &group_node)
 {
   Vector<const VOutputSocket *> group_inputs = get_group_inputs(vtree);
 
@@ -176,17 +192,6 @@ BLI_NOINLINE void InlinedNodeTree::expand_group__relink_inputs(
         *inside_interface_xnode->m_outputs[inside_interface_vsocket->index()];
     XInputSocket &outside_interface = *group_node.m_inputs[input_index];
 
-    /* Create group input for unconnected inputs. */
-    if (outside_interface.is_linked()) {
-      XGroupInput &group_input = *m_allocator.construct<XGroupInput>().release();
-      group_input.m_id = all_group_inputs.append_and_get_index(&group_input);
-      group_input.m_vsocket = &outside_interface.m_vsocket->as_input();
-      group_input.m_parent = group_node.m_parent;
-
-      group_input.m_linked_sockets.append(&outside_interface);
-      outside_interface.m_linked_group_inputs.append(&group_input);
-    }
-
     for (XOutputSocket *outside_connected : outside_interface.m_linked_sockets) {
       outside_connected->m_linked_sockets.remove_first_occurrence_and_reorder(&outside_interface);
     }



More information about the Bf-blender-cvs mailing list