[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