[Bf-blender-cvs] [2fb0eeb7071] master: Nodes: ignore unavailable sockets in logically linked sockets iterator

Jacques Lucke noreply at git.blender.org
Thu May 13 13:20:43 CEST 2021


Commit: 2fb0eeb70715c6c884fce103f76e00eddb58f17f
Author: Jacques Lucke
Date:   Thu May 13 13:11:28 2021 +0200
Branches: master
https://developer.blender.org/rB2fb0eeb70715c6c884fce103f76e00eddb58f17f

Nodes: ignore unavailable sockets in logically linked sockets iterator

Unavailable sockets should generally be ignored during evaluation.
They mainly exist because we don't have a better mechanism to turn
some sockets on/off depending on node parameters.

Currently, it is still possible that a link connects an available with an
unavailable socket. This link is not displayed in the ui and should
generally be ignored.

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

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

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

diff --git a/source/blender/nodes/intern/node_tree_ref.cc b/source/blender/nodes/intern/node_tree_ref.cc
index e42572b9cb7..5c0bc0b5ebc 100644
--- a/source/blender/nodes/intern/node_tree_ref.cc
+++ b/source/blender/nodes/intern/node_tree_ref.cc
@@ -240,7 +240,10 @@ void InputSocketRef::foreach_logical_origin(FunctionRef<void(const OutputSocketR
     }
     const OutputSocketRef &origin = link->from();
     const NodeRef &origin_node = origin.node();
-    if (origin_node.is_reroute_node()) {
+    if (!origin.is_available()) {
+      /* Non available sockets are ignored. */
+    }
+    else if (origin_node.is_reroute_node()) {
       const InputSocketRef &reroute_input = origin_node.input(0);
       const OutputSocketRef &reroute_output = origin_node.output(0);
       skipped_fn.call_safe(reroute_input);
@@ -281,7 +284,10 @@ void OutputSocketRef::foreach_logical_target(
     }
     const InputSocketRef &target = link->to();
     const NodeRef &target_node = target.node();
-    if (target_node.is_reroute_node()) {
+    if (!target.is_available()) {
+      /* Non available sockets are ignored. */
+    }
+    else if (target_node.is_reroute_node()) {
       const OutputSocketRef &reroute_output = target_node.output(0);
       skipped_fn.call_safe(target);
       skipped_fn.call_safe(reroute_output);



More information about the Bf-blender-cvs mailing list