Commit: e0d70e6a9d38812301d5c64f3586f8ca6ecc6ee9
Author: Jacques Lucke
Date: Fri Jan 6 15:20:04 2023 +0100
Branches: master
https://developer.blender.org/rBe0d70e6a9d38812301d5c64f3586f8ca6ecc6ee9
Nodes: avoid processing same node group multiple times to find textures
This removes a lot of overhead when there are node groups that are
reused a lot and only need to be processed once.
===================================================================
M source/blender/editors/space_buttons/buttons_texture.cc
===================================================================
diff --git a/source/blender/editors/space_buttons/buttons_texture.cc
b/source/blender/editors/space_buttons/buttons_texture.cc
index 277402f1572..b4424474ebc 100644
--- a/source/blender/editors/space_buttons/buttons_texture.cc
+++ b/source/blender/editors/space_buttons/buttons_texture.cc
@@ -154,18 +154,23 @@ static void buttons_texture_users_find_nodetree(ListBase
*users,
}
}
-static void buttons_texture_modifier_geonodes_users_add(Object *ob,
- NodesModifierData *nmd,
- bNodeTree *node_tree,
- ListBase *users)
+static void buttons_texture_modifier_geonodes_users_add(
+ Object *ob,
+ NodesModifierData *nmd,
+ bNodeTree *node_tree,
+ ListBase *users,
+ blender::Set<const bNodeTree *> &handled_groups)
{
PointerRNA ptr;
PropertyRNA *prop;
for (bNode *node : node_tree->all_nodes()) {
if (node->type == NODE_GROUP && node->id) {
- /* Recurse into the node group */
- buttons_texture_modifier_geonodes_users_add(ob, nmd, (bNodeTree
*)node->id, users);
+ if (handled_groups.add(reinterpret_cast<bNodeTree *>(node->id))) {
+ /* Recurse into the node group */
+ buttons_texture_modifier_geonodes_users_add(
+ ob, nmd, (bNodeTree *)node->id, users, handled_groups);
+ }
}
LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
if (socket->flag & SOCK_UNAVAIL) {
@@ -205,7 +210,8 @@ static void buttons_texture_modifier_foreach(void *userData,
if (md->type == eModifierType_Nodes) {
NodesModifierData *nmd = (NodesModifierData *)md;
if (nmd->node_group != nullptr) {
- buttons_texture_modifier_geonodes_users_add(ob, nmd, nmd->node_group,
users);
+ blender::Set<const bNodeTree *> handled_groups;
+ buttons_texture_modifier_geonodes_users_add(ob, nmd, nmd->node_group,
users, handled_groups);
}
}
else {
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs