diff options
author | Jacques Lucke <jacques@blender.org> | 2021-03-03 09:59:07 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-03-03 09:59:07 +0300 |
commit | 44ab908c8624326f8b3e90eb5ef45c3d7d87ae0e (patch) | |
tree | 053b6bf66614797efd20019317c4f60ec679bbbd /source/blender/nodes/intern/node_tree_ref.cc | |
parent | 4dd1068a5789097b50eab159adc995906fa5ea84 (diff) |
Nodes: store references to bNodeLinks in NodeTreeRef
Sometimes it is useful to have this information available to be able
to read information from links.
Diffstat (limited to 'source/blender/nodes/intern/node_tree_ref.cc')
-rw-r--r-- | source/blender/nodes/intern/node_tree_ref.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/source/blender/nodes/intern/node_tree_ref.cc b/source/blender/nodes/intern/node_tree_ref.cc index 9dcd90f9f50..e174f096ff7 100644 --- a/source/blender/nodes/intern/node_tree_ref.cc +++ b/source/blender/nodes/intern/node_tree_ref.cc @@ -64,8 +64,16 @@ NodeTreeRef::NodeTreeRef(bNodeTree *btree) : btree_(btree) InputSocketRef &to_socket = this->find_input_socket( node_mapping, blink->tonode, blink->tosock); + LinkRef &link = *allocator_.construct<LinkRef>(); + link.from_ = &from_socket; + link.to_ = &to_socket; + link.blink_ = blink; + + links_.append(&link); from_socket.directly_linked_sockets_.append(&to_socket); to_socket.directly_linked_sockets_.append(&from_socket); + from_socket.directly_linked_links_.append(&link); + to_socket.directly_linked_links_.append(&link); } for (OutputSocketRef *socket : output_sockets_) { @@ -85,6 +93,8 @@ NodeTreeRef::NodeTreeRef(bNodeTree *btree) : btree_(btree) NodeTreeRef::~NodeTreeRef() { + /* The destructor has to be called manually, because these types are allocated in a linear + * allocator. */ for (NodeRef *node : nodes_by_id_) { node->~NodeRef(); } @@ -94,6 +104,9 @@ NodeTreeRef::~NodeTreeRef() for (OutputSocketRef *socket : output_sockets_) { socket->~OutputSocketRef(); } + for (LinkRef *link : links_) { + link->~LinkRef(); + } } InputSocketRef &NodeTreeRef::find_input_socket(Map<bNode *, NodeRef *> &node_mapping, |