[Bf-blender-cvs] [0f47506cde5] blender-v3.2-release: Fix T98501: setting node socket default value is very slow

Jacques Lucke noreply at git.blender.org
Tue May 31 20:44:29 CEST 2022


Commit: 0f47506cde50c4542a0a3c7863b0fb4e735bf8f0
Author: Jacques Lucke
Date:   Tue May 31 20:43:53 2022 +0200
Branches: blender-v3.2-release
https://developer.blender.org/rB0f47506cde50c4542a0a3c7863b0fb4e735bf8f0

Fix T98501: setting node socket default value is very slow

The issue was that the extend socket (the last empty socket in
Input/Output nodes) was repeatedly removed and added again,
which caused more updates than necessary. Now, the extend
socket is kept if it existed already.

Differential Revision: https://developer.blender.org/D15084

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

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

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

diff --git a/source/blender/nodes/intern/node_common.cc b/source/blender/nodes/intern/node_common.cc
index abbfe4b823d..b7c5f9570e4 100644
--- a/source/blender/nodes/intern/node_common.cc
+++ b/source/blender/nodes/intern/node_common.cc
@@ -156,7 +156,8 @@ static void group_verify_socket_list(bNodeTree &node_tree,
                                      bNode &node,
                                      const ListBase &interface_sockets,
                                      ListBase &verify_lb,
-                                     const eNodeSocketInOut in_out)
+                                     const eNodeSocketInOut in_out,
+                                     const bool ensure_extend_socket_exists)
 {
   ListBase old_sockets = verify_lb;
   BLI_listbase_clear(&verify_lb);
@@ -177,6 +178,17 @@ static void group_verify_socket_list(bNodeTree &node_tree,
     }
   }
 
+  if (ensure_extend_socket_exists) {
+    bNodeSocket *last_socket = static_cast<bNodeSocket *>(old_sockets.last);
+    if (last_socket != nullptr && STREQ(last_socket->identifier, "__extend__")) {
+      BLI_remlink(&old_sockets, last_socket);
+      BLI_addtail(&verify_lb, last_socket);
+    }
+    else {
+      nodeAddSocket(&node_tree, &node, in_out, "NodeSocketVirtual", "__extend__", "");
+    }
+  }
+
   /* Remove leftover sockets that didn't match the node group's interface. */
   LISTBASE_FOREACH_MUTABLE (bNodeSocket *, unused_socket, &old_sockets) {
     nodeRemoveSocket(&node_tree, &node, unused_socket);
@@ -195,8 +207,8 @@ void node_group_update(struct bNodeTree *ntree, struct bNode *node)
   }
   else {
     bNodeTree *ngroup = (bNodeTree *)node->id;
-    group_verify_socket_list(*ntree, *node, ngroup->inputs, node->inputs, SOCK_IN);
-    group_verify_socket_list(*ntree, *node, ngroup->outputs, node->outputs, SOCK_OUT);
+    group_verify_socket_list(*ntree, *node, ngroup->inputs, node->inputs, SOCK_IN, false);
+    group_verify_socket_list(*ntree, *node, ngroup->outputs, node->outputs, SOCK_OUT, false);
   }
 }
 
@@ -484,15 +496,7 @@ void node_group_input_update(bNodeTree *ntree, bNode *node)
   }
 
   BLI_freelistN(&tmplinks);
-
-  /* check inputs and outputs, and remove or insert them */
-  {
-    /* value_in_out inverted for interface nodes to get correct socket value_property */
-    group_verify_socket_list(*ntree, *node, ntree->inputs, node->outputs, SOCK_OUT);
-
-    /* add virtual extension socket */
-    nodeAddSocket(ntree, node, SOCK_OUT, "NodeSocketVirtual", "__extend__", "");
-  }
+  group_verify_socket_list(*ntree, *node, ntree->inputs, node->outputs, SOCK_OUT, true);
 }
 
 void register_node_type_group_input()
@@ -582,15 +586,7 @@ void node_group_output_update(bNodeTree *ntree, bNode *node)
   }
 
   BLI_freelistN(&tmplinks);
-
-  /* check inputs and outputs, and remove or insert them */
-  {
-    /* value_in_out inverted for interface nodes to get correct socket value_property */
-    group_verify_socket_list(*ntree, *node, ntree->outputs, node->inputs, SOCK_IN);
-
-    /* add virtual extension socket */
-    nodeAddSocket(ntree, node, SOCK_IN, "NodeSocketVirtual", "__extend__", "");
-  }
+  group_verify_socket_list(*ntree, *node, ntree->outputs, node->inputs, SOCK_IN, true);
 }
 
 void register_node_type_group_output()



More information about the Bf-blender-cvs mailing list