From 8300ba81f2e801226d4605855980e39925841398 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Wed, 31 Mar 2021 16:54:47 +0200 Subject: fix portals --- source/blender/nodes/intern/node_tree_ref.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/source/blender/nodes/intern/node_tree_ref.cc b/source/blender/nodes/intern/node_tree_ref.cc index a779c27e1e2..fb71deee268 100644 --- a/source/blender/nodes/intern/node_tree_ref.cc +++ b/source/blender/nodes/intern/node_tree_ref.cc @@ -105,8 +105,6 @@ NodeTreeRef::NodeTreeRef(bNodeTree *btree) : btree_(btree) } } - this->create_linked_socket_caches(); - for (NodeRef *node : nodes_by_id_) { const bNodeType *nodetype = node->bnode_->typeinfo; nodes_by_type_.add(nodetype, node); @@ -120,6 +118,8 @@ NodeTreeRef::NodeTreeRef(bNodeTree *btree) : btree_(btree) portal_out_nodes_by_id_.add(storage->portal_id, node); } } + + this->create_linked_socket_caches(); } NodeTreeRef::~NodeTreeRef() @@ -232,6 +232,12 @@ void NodeTreeRef::foreach_logical_origin(InputSocketRef &socket, if (origin_node->is_reroute_node()) { this->foreach_logical_origin(*origin_node->inputs_[0], callback, false); } + else if (origin_node->is_portal_out()) { + NodePortalOut *storage = origin_node->storage(); + for (NodeRef *input_node : portal_in_nodes_by_id_.lookup(storage->portal_id)) { + this->foreach_logical_origin(*input_node->inputs_[0], callback); + } + } else if (origin_node->is_muted()) { for (InternalLinkRef *internal_link : origin_node->internal_links_) { if (internal_link->to_ == origin) { @@ -258,6 +264,12 @@ void NodeTreeRef::foreach_logical_target(OutputSocketRef &socket, if (target_node->is_reroute_node()) { this->foreach_logical_target(*target_node->outputs_[0], callback); } + else if (target_node->is_portal_in()) { + NodePortalIn *storage = target_node->storage(); + for (NodeRef *output_node : portal_out_nodes_by_id_.lookup(storage->portal_id)) { + this->foreach_logical_target(*output_node->outputs_[0], callback); + } + } else if (target_node->is_muted()) { for (InternalLinkRef *internal_link : target_node->internal_links_) { if (internal_link->from_ == target) { -- cgit v1.2.3