[Bf-blender-cvs] [e0d70e6a9d3] master: Nodes: avoid processing same node group multiple times to find textures
Jacques Lucke
noreply at git.blender.org
Fri Jan 6 15:20:36 CET 2023
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 {
More information about the Bf-blender-cvs
mailing list