Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2021-03-31 17:54:47 +0300
committerJacques Lucke <jacques@blender.org>2021-03-31 17:54:47 +0300
commit8300ba81f2e801226d4605855980e39925841398 (patch)
treed95274bdf0b1e4fad0d386690ccf1aca8750fc7f
parent2db2afeeb68b2e6a15b4b0d1276ca6184f8b8256 (diff)
-rw-r--r--source/blender/nodes/intern/node_tree_ref.cc16
1 files 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<NodePortalOut>();
+ 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<NodePortalIn>();
+ 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) {