[Bf-blender-cvs] [ab101d444d3] master: Fix T89881: ignore unavailable sockets when searching for link cycles

Jacques Lucke noreply at git.blender.org
Wed Jul 21 11:29:29 CEST 2021


Commit: ab101d444d30a2f98320fc96f2dc4d56ccd98965
Author: Jacques Lucke
Date:   Wed Jul 21 11:27:04 2021 +0200
Branches: master
https://developer.blender.org/rBab101d444d30a2f98320fc96f2dc4d56ccd98965

Fix T89881: ignore unavailable sockets when searching for link cycles

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

M	source/blender/nodes/intern/derived_node_tree.cc
M	source/blender/nodes/intern/node_tree_ref.cc

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

diff --git a/source/blender/nodes/intern/derived_node_tree.cc b/source/blender/nodes/intern/derived_node_tree.cc
index 3d5557d4049..f7279cf7524 100644
--- a/source/blender/nodes/intern/derived_node_tree.cc
+++ b/source/blender/nodes/intern/derived_node_tree.cc
@@ -73,7 +73,9 @@ void DerivedNodeTree::destruct_context_recursively(DTreeContext *context)
   context->~DTreeContext();
 }
 
-/* Returns true if there are any cycles in the node tree. */
+/**
+ * \return True when there is a link cycle. Unavailable sockets are ignored.
+ */
 bool DerivedNodeTree::has_link_cycles() const
 {
   for (const NodeTreeRef *tree_ref : used_node_tree_refs_) {
diff --git a/source/blender/nodes/intern/node_tree_ref.cc b/source/blender/nodes/intern/node_tree_ref.cc
index 9ce9d6fc273..641d02af902 100644
--- a/source/blender/nodes/intern/node_tree_ref.cc
+++ b/source/blender/nodes/intern/node_tree_ref.cc
@@ -423,7 +423,13 @@ static bool has_link_cycles_recursive(const NodeRef &node,
   is_in_stack[node_id] = true;
 
   for (const OutputSocketRef *from_socket : node.outputs()) {
+    if (!from_socket->is_available()) {
+      continue;
+    }
     for (const InputSocketRef *to_socket : from_socket->directly_linked_sockets()) {
+      if (!to_socket->is_available()) {
+        continue;
+      }
       const NodeRef &to_node = to_socket->node();
       if (has_link_cycles_recursive(to_node, visited, is_in_stack)) {
         return true;
@@ -435,6 +441,9 @@ static bool has_link_cycles_recursive(const NodeRef &node,
   return false;
 }
 
+/**
+ * \return True when there is a link cycle. Unavailable sockets are ignored.
+ */
 bool NodeTreeRef::has_link_cycles() const
 {
   const int node_amount = nodes_by_id_.size();



More information about the Bf-blender-cvs mailing list