Cleanup: Use Span to iterate over nodes instead of ListBase

Since 90ea1b7643, there is always a span of nodes
available at runtime. This is easier to read and write.
This commit is contained in:
Hans Goudey 2022-12-02 11:12:51 -06:00
parent c5e71cebaa
commit 5b8e2ebd97
Notes: blender-bot 2023-02-16 18:12:54 +01:00
Referenced by commit c2a0decbf3, Cleanup: Use Span to iterate over nodes instead of ListBase
25 changed files with 129 additions and 119 deletions

View File

@ -71,6 +71,7 @@
#include "BKE_lib_id.h"
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_node_runtime.hh"
#include "BKE_node_tree_update.h"
#include "BKE_packedFile.h"
#include "BKE_report.h"
@ -2743,7 +2744,7 @@ static void image_walk_ntree_all_users(
{
switch (ntree->type) {
case NTREE_SHADER:
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->id) {
if (node->type == SH_NODE_TEX_IMAGE) {
NodeTexImage *tex = static_cast<NodeTexImage *>(node->storage);
@ -2759,7 +2760,7 @@ static void image_walk_ntree_all_users(
}
break;
case NTREE_TEXTURE:
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->id && node->type == TEX_NODE_IMAGE) {
Image *ima = (Image *)node->id;
ImageUser *iuser = static_cast<ImageUser *>(node->storage);
@ -2768,7 +2769,7 @@ static void image_walk_ntree_all_users(
}
break;
case NTREE_COMPOSIT:
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->id && node->type == CMP_NODE_IMAGE) {
Image *ima = (Image *)node->id;
ImageUser *iuser = static_cast<ImageUser *>(node->storage);

View File

@ -58,6 +58,7 @@
#include "BKE_material.h"
#include "BKE_mesh.h"
#include "BKE_node.h"
#include "BKE_node_runtime.hh"
#include "BKE_object.h"
#include "BKE_scene.h"
#include "BKE_vfont.h"
@ -1387,7 +1388,7 @@ static bool ntree_foreach_texnode_recursive(bNodeTree *nodetree,
{
const bool do_image_nodes = (slot_filter & PAINT_SLOT_IMAGE) != 0;
const bool do_color_attributes = (slot_filter & PAINT_SLOT_COLOR_ATTRIBUTE) != 0;
LISTBASE_FOREACH (bNode *, node, &nodetree->nodes) {
for (bNode *node : nodetree->all_nodes()) {
if (do_image_nodes && node->typeinfo->nclass == NODE_CLASS_TEXTURE &&
node->typeinfo->type == SH_NODE_TEX_IMAGE && node->id) {
if (!callback(node, userdata)) {

View File

@ -166,9 +166,9 @@ static void ntree_copy_data(Main * /*bmain*/, ID *id_dst, const ID *id_src, cons
}
/* update node->parent pointers */
LISTBASE_FOREACH (bNode *, new_node, &ntree_dst->nodes) {
if (new_node->parent) {
new_node->parent = dst_runtime.nodes_by_id.lookup_key_as(new_node->parent->identifier);
for (bNode *node : ntree_dst->all_nodes()) {
if (node->parent) {
node->parent = dst_runtime.nodes_by_id.lookup_key_as(node->parent->identifier);
}
}
@ -323,7 +323,7 @@ static void node_foreach_id(ID *id, LibraryForeachIDData *data)
BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, ntree->gpd, IDWALK_CB_USER);
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
BKE_LIB_FOREACHID_PROCESS_ID(data, node->id, IDWALK_CB_USER);
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
@ -363,7 +363,7 @@ static void node_foreach_cache(ID *id,
#endif
if (nodetree->type == NTREE_COMPOSIT) {
LISTBASE_FOREACH (bNode *, node, &nodetree->nodes) {
for (bNode *node : nodetree->all_nodes()) {
if (node->type == CMP_NODE_MOVIEDISTORTION) {
key.offset_in_ID = size_t(BLI_ghashutil_strhash_p(node->name));
function_callback(id, &key, (void **)&node->storage, 0, user_data);
@ -378,7 +378,7 @@ static void node_foreach_path(ID *id, BPathForeachPathData *bpath_data)
switch (ntree->type) {
case NTREE_SHADER: {
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->type == SH_NODE_SCRIPT) {
NodeShaderScript *nss = reinterpret_cast<NodeShaderScript *>(node->storage);
BKE_bpath_foreach_path_fixed_process(bpath_data, nss->filepath);
@ -495,7 +495,7 @@ void ntreeBlendWrite(BlendWriter *writer, bNodeTree *ntree)
BKE_animdata_blend_write(writer, ntree->adt);
}
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
BLO_write_struct(writer, bNode, node);
if (node->prop) {
@ -1229,7 +1229,7 @@ static void update_typeinfo(Main *bmain,
}
/* initialize nodes */
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (nodetype && STREQ(node->idname, nodetype->idname)) {
node_set_typeinfo(C, ntree, node, unregister ? nullptr : nodetype);
}
@ -1266,7 +1266,7 @@ void ntreeSetTypes(const bContext *C, bNodeTree *ntree)
{
ntree_set_typeinfo(ntree, ntreeTypeFind(ntree->idname));
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
node_set_typeinfo(C, ntree, node, nodeTypeFind(node->idname));
LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
@ -2023,7 +2023,7 @@ void nodeFindNode(bNodeTree *ntree, bNodeSocket *sock, bNode **r_node, int *r_so
bool nodeFindNodeTry(bNodeTree *ntree, bNodeSocket *sock, bNode **r_node, int *r_sockindex)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
ListBase *sockets = (sock->in_out == SOCK_IN) ? &node->inputs : &node->outputs;
int i;
LISTBASE_FOREACH_INDEX (bNodeSocket *, tsock, sockets, i) {
@ -2778,7 +2778,7 @@ static void node_preview_init_tree_recursive(bNodeInstanceHash *previews,
const int xsize,
const int ysize)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
bNodeInstanceKey key = BKE_node_instance_key(parent_key, ntree, node);
if (BKE_node_preview_used(node)) {
@ -2811,7 +2811,7 @@ static void node_preview_tag_used_recursive(bNodeInstanceHash *previews,
bNodeTree *ntree,
bNodeInstanceKey parent_key)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
bNodeInstanceKey key = BKE_node_instance_key(parent_key, ntree, node);
if (BKE_node_preview_used(node)) {
@ -2926,7 +2926,7 @@ void nodeUnlinkNode(bNodeTree *ntree, bNode *node)
static void node_unlink_attached(bNodeTree *ntree, bNode *parent)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->parent == parent) {
nodeDetachNode(ntree, node);
}
@ -3454,7 +3454,7 @@ bool ntreeHasTree(const bNodeTree *ntree, const bNodeTree *lookup)
if (ntree == lookup) {
return true;
}
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (const bNode *node : ntree->all_nodes()) {
if (ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP) && node->id) {
if (ntreeHasTree((bNodeTree *)node->id, lookup)) {
return true;
@ -3494,7 +3494,7 @@ bNode *nodeGetActive(bNodeTree *ntree)
return nullptr;
}
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->flag & NODE_ACTIVE) {
return node;
}
@ -3526,7 +3526,7 @@ void nodeClearActive(bNodeTree *ntree)
return;
}
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
node->flag &= ~NODE_ACTIVE;
}
}
@ -3540,7 +3540,7 @@ void nodeSetActive(bNodeTree *ntree, bNode *node)
SET_FLAG_FROM_TEST(flags_to_set, is_texture_class, NODE_ACTIVE_TEXTURE);
/* Make sure only one node is active per node tree. */
LISTBASE_FOREACH (bNode *, tnode, &ntree->nodes) {
for (bNode *tnode : ntree->all_nodes()) {
tnode->flag &= ~flags_to_set;
}
node->flag |= flags_to_set;
@ -3974,7 +3974,7 @@ void ntreeUpdateAllUsers(Main *main, ID *id)
/* Update all users of ngroup, to add/remove sockets as needed. */
FOREACH_NODETREE_BEGIN (main, ntree, owner_id) {
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->id == id) {
BKE_ntree_update_tag_node_property(ntree, node);
need_update = true;
@ -4315,7 +4315,7 @@ bool BKE_node_tree_iter_step(NodeTreeIterStore *ntreeiter, bNodeTree **r_nodetre
void BKE_nodetree_remove_layer_n(bNodeTree *ntree, Scene *scene, const int layer_index)
{
BLI_assert(layer_index != -1);
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->type == CMP_NODE_R_LAYERS && (Scene *)node->id == scene) {
if (node->custom1 == layer_index) {
node->custom1 = 0;

View File

@ -733,7 +733,7 @@ struct NodeTreeRelations {
this->ensure_all_trees();
for (bNodeTree *ntree : *all_trees_) {
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->id == nullptr) {
continue;
}
@ -1012,7 +1012,7 @@ class NodeTreeMainUpdater {
#ifdef DEBUG
/* Check the uniqueness of node identifiers. */
Set<int32_t> node_identifiers;
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
BLI_assert(node->identifier > 0);
node_identifiers.add_new(node->identifier);
}
@ -1053,7 +1053,7 @@ class NodeTreeMainUpdater {
void update_individual_nodes(bNodeTree &ntree)
{
Vector<bNode *> group_inout_nodes;
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
nodeDeclarationEnsure(&ntree, node);
if (this->should_update_individual_node(ntree, *node)) {
bNodeType &ntype = *node->typeinfo;
@ -1610,7 +1610,7 @@ class NodeTreeMainUpdater {
void reset_changed_flags(bNodeTree &ntree)
{
ntree.runtime->changed_flag = NTREE_CHANGED_NOTHING;
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
node->runtime->changed_flag = NTREE_CHANGED_NOTHING;
node->runtime->update = 0;
LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
@ -1728,7 +1728,7 @@ void BKE_ntree_update_tag_parent_change(bNodeTree *ntree, bNode *node)
void BKE_ntree_update_tag_id_changed(Main *bmain, ID *id)
{
FOREACH_NODETREE_BEGIN (bmain, ntree, ntree_id) {
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->id == id) {
node->runtime->update |= NODE_UPDATE_ID;
add_node_tag(ntree, node, NTREE_CHANGED_NODE_PROPERTY);

View File

@ -79,6 +79,7 @@
#include "BKE_main.h"
#include "BKE_mask.h"
#include "BKE_node.h"
#include "BKE_node_runtime.hh"
#include "BKE_object.h"
#include "BKE_paint.h"
#include "BKE_pointcache.h"
@ -1449,7 +1450,7 @@ static void scene_blend_read_data(BlendDataReader *reader, ID *id)
/* patch for missing scene IDs, can't be in do-versions */
static void composite_patch(bNodeTree *ntree, Scene *scene)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->id == nullptr &&
((node->type == CMP_NODE_R_LAYERS) ||
(node->type == CMP_NODE_CRYPTOMATTE && node->custom1 == CMP_CRYPTOMATTE_SRC_RENDER))) {

View File

@ -730,7 +730,7 @@ static void texture_nodes_fetch_images_for_pool(Tex *texture,
bNodeTree *ntree,
struct ImagePool *pool)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->type == SH_NODE_TEX_IMAGE && node->id != nullptr) {
Image *image = (Image *)node->id;
BKE_image_pool_acquire_ibuf(image, &texture->iuser, pool);

View File

@ -21,6 +21,7 @@
#include "BKE_main.h"
#include "BKE_main_namemap.h"
#include "BKE_node.h"
#include "BKE_node_runtime.hh"
#include "MEM_guardedalloc.h"
@ -115,7 +116,7 @@ void version_node_socket_name(bNodeTree *ntree,
const char *old_name,
const char *new_name)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->type == node_type) {
change_node_socket_name(&node->inputs, old_name, new_name);
change_node_socket_name(&node->outputs, old_name, new_name);
@ -128,7 +129,7 @@ void version_node_input_socket_name(bNodeTree *ntree,
const char *old_name,
const char *new_name)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->type == node_type) {
change_node_socket_name(&node->inputs, old_name, new_name);
}
@ -140,7 +141,7 @@ void version_node_output_socket_name(bNodeTree *ntree,
const char *old_name,
const char *new_name)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->type == node_type) {
change_node_socket_name(&node->outputs, old_name, new_name);
}
@ -164,7 +165,7 @@ bNodeSocket *version_node_add_socket_if_not_exist(bNodeTree *ntree,
void version_node_id(bNodeTree *ntree, const int node_type, const char *new_name)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->type == node_type) {
if (!STREQ(node->idname, new_name)) {
strcpy(node->idname, new_name);
@ -191,7 +192,7 @@ void version_node_socket_index_animdata(Main *bmain,
continue;
}
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->type != node_type) {
continue;
}
@ -216,7 +217,7 @@ void version_node_socket_index_animdata(Main *bmain,
void version_socket_update_is_used(bNodeTree *ntree)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
socket->flag &= ~SOCK_IN_USE;
}

View File

@ -51,6 +51,7 @@
#include "BKE_material.h"
#include "BKE_mesh.h"
#include "BKE_node.h"
#include "BKE_node_runtime.hh"
#include "BKE_node_tree_update.h"
#include "BKE_paint.h"
#include "BKE_screen.h"
@ -598,7 +599,7 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template)
ma->roughness = 0.5f;
if (ma->nodetree) {
LISTBASE_FOREACH (bNode *, node, &ma->nodetree->nodes) {
for (bNode *node : ma->nodetree->all_nodes()) {
if (node->type == SH_NODE_BSDF_PRINCIPLED) {
bNodeSocket *roughness_socket = nodeFindSocket(node, SOCK_IN, "Roughness");
bNodeSocketValueFloat *roughness_data = static_cast<bNodeSocketValueFloat *>(

View File

@ -1764,7 +1764,7 @@ void DepsgraphNodeBuilder::build_nodetree(bNodeTree *ntree)
}
/* nodetree's nodes... */
LISTBASE_FOREACH (bNode *, bnode, &ntree->nodes) {
for (bNode *bnode : ntree->all_nodes()) {
build_idproperties(bnode->prop);
LISTBASE_FOREACH (bNodeSocket *, socket, &bnode->inputs) {
build_nodetree_socket(socket);

View File

@ -2627,7 +2627,7 @@ void DepsgraphRelationBuilder::build_nodetree(bNodeTree *ntree)
RELATION_FLAG_NO_FLUSH);
}
/* nodetree's nodes... */
LISTBASE_FOREACH (bNode *, bnode, &ntree->nodes) {
for (bNode *bnode : ntree->all_nodes()) {
build_idproperties(bnode->prop);
LISTBASE_FOREACH (bNodeSocket *, socket, &bnode->inputs) {
build_nodetree_socket(socket);

View File

@ -34,10 +34,9 @@
#include "BKE_linestyle.h"
#include "BKE_modifier.h"
#include "BKE_node.h"
#include "BKE_node_runtime.hh"
#include "BKE_paint.h"
#include "BKE_particle.h"
#ifdef WITH_FREESTYLE
#endif
#include "RNA_access.h"
#include "RNA_prototypes.h"
@ -163,7 +162,7 @@ static void buttons_texture_modifier_geonodes_users_add(Object *ob,
PointerRNA ptr;
PropertyRNA *prop;
LISTBASE_FOREACH (bNode *, node, &node_tree->nodes) {
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);
@ -442,7 +441,7 @@ static void template_texture_select(bContext *C, void *user_p, void *UNUSED(arg)
ct->texture = nullptr;
/* Not totally sure if we should also change selection? */
LISTBASE_FOREACH (bNode *, node, &user->ntree->nodes) {
for (bNode *node : user->ntree->all_nodes()) {
nodeSetSelected(node, false);
}
nodeSetSelected(user->node, true);

View File

@ -9,6 +9,7 @@
#include "BKE_context.h"
#include "BKE_idprop.h"
#include "BKE_lib_id.h"
#include "BKE_node_runtime.hh"
#include "BKE_node_tree_update.h"
#include "BKE_screen.h"
@ -91,7 +92,7 @@ static void add_group_input_node_fn(nodes::LinkSearchOpParams &params)
ED_node_tree_propagate_change(&params.C, CTX_data_main(&params.C), &params.node_tree);
/* Hide the new input in all other group input nodes, to avoid making them taller. */
LISTBASE_FOREACH (bNode *, node, &params.node_tree.nodes) {
for (bNode *node : params.node_tree.all_nodes()) {
if (node->type == NODE_GROUP_INPUT) {
bNodeSocket *new_group_input_socket = (bNodeSocket *)BLI_findlink(&node->outputs,
group_input_index);

View File

@ -2621,7 +2621,7 @@ static void count_multi_input_socket_links(bNodeTree &ntree, SpaceNode &snode)
}
}
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
if (socket->flag & SOCK_MULTI_INPUT) {
socket->runtime->total_inputs = counts.lookup_default(socket, 0);

View File

@ -116,7 +116,7 @@ float2 node_link_calculate_multi_input_position(const float2 &socket_position,
static void compo_tag_output_nodes(bNodeTree *nodetree, int recalc_flags)
{
LISTBASE_FOREACH (bNode *, node, &nodetree->nodes) {
for (bNode *node : nodetree->all_nodes()) {
if (node->type == CMP_NODE_COMPOSITE) {
if (recalc_flags & COM_RECALC_COMPOSITE) {
node->flag |= NODE_DO_OUTPUT_RECALC;
@ -505,7 +505,7 @@ void ED_node_shader_default(const bContext *C, ID *id)
ma->nodetree = ntreeCopyTree(bmain, ma_default->nodetree);
ma->nodetree->owner_id = &ma->id;
LISTBASE_FOREACH (bNode *, node_iter, &ma->nodetree->nodes) {
for (bNode *node_iter : ma->nodetree->all_nodes()) {
BLI_strncpy(node_iter->name, DATA_(node_iter->name), NODE_MAXSTR);
nodeUniqueName(ma->nodetree, node_iter);
}
@ -680,7 +680,7 @@ void ED_node_set_active(
/* generic node group output: set node as active output */
if (node->type == NODE_GROUP_OUTPUT) {
LISTBASE_FOREACH (bNode *, node_iter, &ntree->nodes) {
for (bNode *node_iter : ntree->all_nodes()) {
if (node_iter->type == NODE_GROUP_OUTPUT) {
node_iter->flag &= ~NODE_DO_OUTPUT;
}
@ -700,7 +700,7 @@ void ED_node_set_active(
SH_NODE_OUTPUT_WORLD,
SH_NODE_OUTPUT_LIGHT,
SH_NODE_OUTPUT_LINESTYLE)) {
LISTBASE_FOREACH (bNode *, node_iter, &ntree->nodes) {
for (bNode *node_iter : ntree->all_nodes()) {
if (node_iter->type == node->type) {
node_iter->flag &= ~NODE_DO_OUTPUT;
}
@ -759,7 +759,7 @@ void ED_node_set_active(
else if (ntree->type == NTREE_COMPOSIT) {
/* make active viewer, currently only 1 supported... */
if (ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) {
LISTBASE_FOREACH (bNode *, node_iter, &ntree->nodes) {
for (bNode *node_iter : ntree->all_nodes()) {
if (ELEM(node_iter->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) {
node_iter->flag &= ~NODE_DO_OUTPUT;
}
@ -776,7 +776,7 @@ void ED_node_set_active(
}
else if (node->type == CMP_NODE_COMPOSITE) {
if (was_output == 0) {
LISTBASE_FOREACH (bNode *, node_iter, &ntree->nodes) {
for (bNode *node_iter : ntree->all_nodes()) {
if (node_iter->type == CMP_NODE_COMPOSITE) {
node_iter->flag &= ~NODE_DO_OUTPUT;
}
@ -804,7 +804,7 @@ void ED_node_set_active(
else if (ntree->type == NTREE_GEOMETRY) {
if (node->type == GEO_NODE_VIEWER) {
if ((node->flag & NODE_DO_OUTPUT) == 0) {
LISTBASE_FOREACH (bNode *, node_iter, &ntree->nodes) {
for (bNode *node_iter : ntree->all_nodes()) {
if (node_iter->type == GEO_NODE_VIEWER) {
node_iter->flag &= ~NODE_DO_OUTPUT;
}
@ -1362,7 +1362,7 @@ static int node_duplicate_exec(bContext *C, wmOperator *op)
Map<const ID *, ID *> duplicated_node_groups;
bNode *lastnode = (bNode *)ntree->nodes.last;
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->flag & SELECT) {
bNode *new_node = bke::node_copy_with_mapping(
ntree, *node, LIB_ID_COPY_DEFAULT, true, socket_map);
@ -1429,11 +1429,11 @@ static int node_duplicate_exec(bContext *C, wmOperator *op)
}
/* clear flags for recursive depth-first iteration */
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
node->flag &= ~NODE_TEST;
}
/* reparent copied nodes */
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if ((node->flag & SELECT) && !(node->flag & NODE_TEST)) {
node_duplicate_reparent_recursive(ntree, node_map, node);
}
@ -1445,7 +1445,7 @@ static int node_duplicate_exec(bContext *C, wmOperator *op)
}
/* deselect old nodes, select the copies instead */
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->flag & SELECT) {
/* has been set during copy above */
bNode *newnode = node_map.lookup(node);
@ -1500,6 +1500,7 @@ static int node_read_viewlayers_exec(bContext *C, wmOperator * /*op*/)
Main *bmain = CTX_data_main(C);
SpaceNode *snode = CTX_wm_space_node(C);
Scene *curscene = CTX_data_scene(C);
bNodeTree &edit_tree = *snode->edittree;
ED_preview_kill_jobs(CTX_wm_manager(C), bmain);
@ -1508,7 +1509,7 @@ static int node_read_viewlayers_exec(bContext *C, wmOperator * /*op*/)
scene->id.tag |= LIB_TAG_DOIT;
}
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
for (bNode *node : edit_tree.all_nodes()) {
if ((node->type == CMP_NODE_R_LAYERS) ||
(node->type == CMP_NODE_CRYPTOMATTE && node->custom1 == CMP_CRYPTOMATTE_SRC_RENDER)) {
ID *id = node->id;
@ -1523,7 +1524,7 @@ static int node_read_viewlayers_exec(bContext *C, wmOperator * /*op*/)
}
}
ED_node_tree_propagate_change(C, bmain, snode->edittree);
ED_node_tree_propagate_change(C, bmain, &edit_tree);
return OPERATOR_FINISHED;
}
@ -1551,7 +1552,7 @@ int node_render_changed_exec(bContext *C, wmOperator * /*op*/)
* All the nodes are using same render result, so there is no need to do
* anything smart about check how exactly scene is used. */
bNode *node = nullptr;
LISTBASE_FOREACH (bNode *, node_iter, &sce->nodetree->nodes) {
for (bNode *node_iter : sce->nodetree->all_nodes()) {
if (node_iter->id == (ID *)sce) {
node = node_iter;
break;
@ -1610,7 +1611,7 @@ static void node_flag_toggle_exec(SpaceNode *snode, int toggle_flag)
* If the flag is not set on all nodes, it is set.
*/
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
for (bNode *node : snode->edittree->all_nodes()) {
if (node->flag & SELECT) {
if (toggle_flag == NODE_PREVIEW && (node->typeinfo->flag & NODE_PREVIEW) == 0) {
@ -1629,7 +1630,7 @@ static void node_flag_toggle_exec(SpaceNode *snode, int toggle_flag)
}
}
}
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
for (bNode *node : snode->edittree->all_nodes()) {
if (node->flag & SELECT) {
if (toggle_flag == NODE_PREVIEW && (node->typeinfo->flag & NODE_PREVIEW) == 0) {
@ -1721,7 +1722,7 @@ static int node_deactivate_viewer_exec(bContext *C, wmOperator * /*op*/)
bNode *active_viewer = viewer_path::find_geometry_nodes_viewer(workspace.viewer_path, snode);
LISTBASE_FOREACH (bNode *, node, &snode.edittree->nodes) {
for (bNode *node : snode.edittree->all_nodes()) {
if (node->type != GEO_NODE_VIEWER) {
continue;
}
@ -1798,7 +1799,7 @@ static int node_socket_toggle_exec(bContext *C, wmOperator * /*op*/)
/* Toggle for all selected nodes */
bool hidden = false;
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
for (bNode *node : snode->edittree->all_nodes()) {
if (node->flag & SELECT) {
if (node_has_hidden_sockets(node)) {
hidden = true;
@ -1807,7 +1808,7 @@ static int node_socket_toggle_exec(bContext *C, wmOperator * /*op*/)
}
}
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
for (bNode *node : snode->edittree->all_nodes()) {
if (node->flag & SELECT) {
node_set_hidden_sockets(snode, node, !hidden);
}
@ -1848,7 +1849,7 @@ static int node_mute_exec(bContext *C, wmOperator * /*op*/)
ED_preview_kill_jobs(CTX_wm_manager(C), bmain);
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
for (bNode *node : snode->edittree->all_nodes()) {
if ((node->flag & SELECT) && !node->typeinfo->no_muting) {
node->flag ^= NODE_MUTED;
BKE_ntree_update_tag_node_mute(snode->edittree, node);
@ -2198,7 +2199,7 @@ static int node_copy_color_exec(bContext *C, wmOperator * /*op*/)
return OPERATOR_CANCELLED;
}
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
if (node->flag & NODE_SELECT && node != active_node) {
if (active_node->flag & NODE_CUSTOM_COLOR) {
node->flag |= NODE_CUSTOM_COLOR;
@ -2249,7 +2250,7 @@ static int node_clipboard_copy_exec(bContext *C, wmOperator * /*op*/)
Map<const bNode *, bNode *> node_map;
Map<const bNodeSocket *, bNodeSocket *> socket_map;
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->flag & SELECT) {
/* No ID refcounting, this node is virtual,
* detached from any actual Blender data currently. */
@ -2801,7 +2802,7 @@ static bool node_shader_script_update_text_recursive(RenderEngine *engine,
done_trees.add_new(ntree);
/* update each script that is using this text datablock */
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->type == NODE_GROUP) {
bNodeTree *ngroup = (bNodeTree *)node->id;
if (ngroup && !done_trees.contains(ngroup)) {

View File

@ -440,7 +440,7 @@ static bool node_group_separate_selected(
Main &bmain, bNodeTree &ntree, bNodeTree &ngroup, const float2 &offset, const bool make_copy)
{
/* deselect all nodes in the target tree */
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
nodeSetSelected(node, false);
}
@ -642,7 +642,7 @@ void NODE_OT_group_separate(wmOperatorType *ot)
/** \name Make Group Operator
* \{ */
static bool node_group_make_use_node(bNode &node, bNode *gnode)
static bool node_group_make_use_node(const bNode &node, bNode *gnode)
{
return (&node != gnode && !ELEM(node.type, NODE_GROUP_INPUT, NODE_GROUP_OUTPUT) &&
(node.flag & NODE_SELECT));
@ -659,7 +659,7 @@ static bool node_group_make_test_selected(bNodeTree &ntree,
bNodeTree *ngroup = ntreeAddTree(nullptr, "Pseudo Node Group", ntree_idname);
/* check poll functions for selected nodes */
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
if (node_group_make_use_node(*node, gnode)) {
const char *disabled_hint = nullptr;
if (node->typeinfo->poll_instance &&
@ -699,7 +699,7 @@ static bool node_group_make_test_selected(bNodeTree &ntree,
link->fromnode->runtime->done |= 2;
}
}
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
if (!(node->flag & NODE_SELECT) && node != gnode && node->runtime->done == 3) {
return false;
}
@ -713,7 +713,7 @@ static int node_get_selected_minmax(
int totselect = 0;
INIT_MINMAX2(min, max);
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (const bNode *node : ntree.all_nodes()) {
if (node_group_make_use_node(*node, gnode)) {
float2 loc;
nodeToView(node, node->offsetx, node->offsety, &loc.x, &loc.y);
@ -814,7 +814,7 @@ static void node_group_make_insert_selected(const bContext &C, bNodeTree &ntree,
static const float offsety = 0.0f;
/* deselect all nodes in the target tree */
LISTBASE_FOREACH (bNode *, node, &ngroup->nodes) {
for (bNode *node : ngroup->all_nodes()) {
nodeSetSelected(node, false);
}
@ -835,7 +835,7 @@ static void node_group_make_insert_selected(const bContext &C, bNodeTree &ntree,
/* Detach unselected nodes inside frames when the frame is put into the group. Otherwise the
* `parent` pointer becomes dangling. */
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
if (node->parent == nullptr) {
continue;
}
@ -979,7 +979,7 @@ static void node_group_make_insert_selected(const bContext &C, bNodeTree &ntree,
}
/* move nodes in the group to the center */
LISTBASE_FOREACH (bNode *, node, &ngroup->nodes) {
for (bNode *node : ngroup->all_nodes()) {
if (node_group_make_use_node(*node, gnode) && !node->parent) {
node->locx -= center[0];
node->locy -= center[1];
@ -988,7 +988,7 @@ static void node_group_make_insert_selected(const bContext &C, bNodeTree &ntree,
/* Expose all unlinked sockets too but only the visible ones. */
if (expose_visible) {
LISTBASE_FOREACH (bNode *, node, &ngroup->nodes) {
for (bNode *node : ngroup->all_nodes()) {
if (node_group_make_use_node(*node, gnode)) {
LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
bool skip = false;

View File

@ -343,7 +343,7 @@ static void snode_autoconnect(SpaceNode &snode, const bool allow_multiple, const
bNodeTree *ntree = snode.edittree;
Vector<bNode *> sorted_nodes;
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->flag & NODE_SELECT) {
sorted_nodes.append(node);
}
@ -616,7 +616,7 @@ static int view_socket(const bContext &C,
{
bNode *viewer_node = nullptr;
/* Try to find a viewer that is already active. */
LISTBASE_FOREACH (bNode *, node, &btree.nodes) {
for (bNode *node : btree.all_nodes()) {
if (is_viewer_node(*node)) {
if (node->flag & NODE_DO_OUTPUT) {
viewer_node = node;
@ -636,7 +636,7 @@ static int view_socket(const bContext &C,
}
if (viewer_node == nullptr) {
LISTBASE_FOREACH (bNode *, node, &btree.nodes) {
for (bNode *node : btree.all_nodes()) {
if (is_viewer_node(*node)) {
viewer_node = node;
break;
@ -1554,7 +1554,7 @@ static int detach_links_exec(bContext *C, wmOperator * /*op*/)
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
if (node->flag & SELECT) {
nodeInternalRelink(&ntree, node);
}
@ -1593,7 +1593,7 @@ static int node_parent_set_exec(bContext *C, wmOperator * /*op*/)
return OPERATOR_CANCELLED;
}
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
if (node == frame) {
continue;
}
@ -1679,11 +1679,11 @@ static int node_join_exec(bContext *C, wmOperator * /*op*/)
nodeSetActive(&ntree, frame_node);
/* reset tags */
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
node->runtime->done = 0;
}
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
if (!(node->runtime->done & NODE_JOIN_DONE)) {
node_join_attach_recursive(ntree, node, frame_node, selected_nodes);
}
@ -1844,13 +1844,13 @@ static int node_detach_exec(bContext *C, wmOperator * /*op*/)
bNodeTree &ntree = *snode.edittree;
/* reset tags */
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
node->runtime->done = 0;
}
/* detach nodes recursively
* relative order is preserved here!
*/
LISTBASE_FOREACH (bNode *, node, &ntree.nodes) {
for (bNode *node : ntree.all_nodes()) {
if (!(node->runtime->done & NODE_DETACH_DONE)) {
node_detach_recursive(ntree, node);
}
@ -2166,7 +2166,7 @@ static void node_parent_offset_apply(NodeInsertOfsData *data, bNode *parent, con
/* Flag all children as offset to prevent them from being offset
* separately (they've already moved with the parent). */
LISTBASE_FOREACH (bNode *, node, &data->ntree->nodes) {
for (bNode *node : data->ntree->all_nodes()) {
if (nodeIsChildOf(parent, node)) {
/* NODE_TEST is used to flag nodes that shouldn't be offset (again) */
node->flag |= NODE_TEST;
@ -2201,12 +2201,12 @@ static bool node_link_insert_offset_frame_chain_cb(bNode *fromnode,
/**
* Applies #NodeInsertOfsData.offset_x to all children of \a parent.
*/
static void node_link_insert_offset_frame_chains(const bNodeTree *ntree,
static void node_link_insert_offset_frame_chains(bNodeTree *ntree,
const bNode *parent,
NodeInsertOfsData *data,
const bool reversed)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (nodeIsChildOf(parent, node)) {
nodeChainIter(ntree, node, node_link_insert_offset_frame_chain_cb, data, reversed);
}
@ -2384,7 +2384,7 @@ static int node_insert_offset_modal(bContext *C, wmOperator *op, const wmEvent *
/* handle animation - do this before possibly aborting due to duration, since
* main thread might be so busy that node hasn't reached final position yet */
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
for (bNode *node : snode->edittree->all_nodes()) {
if (UNLIKELY(node->runtime->anim_ofsx)) {
const float endval = node->runtime->anim_init_locx + node->runtime->anim_ofsx;
if (IS_EQF(node->locx, endval) == false) {
@ -2410,7 +2410,7 @@ static int node_insert_offset_modal(bContext *C, wmOperator *op, const wmEvent *
if (duration > NODE_INSOFS_ANIM_DURATION) {
WM_event_remove_timer(CTX_wm_manager(C), nullptr, iofsd->anim_timer);
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
for (bNode *node : snode->edittree->all_nodes()) {
node->runtime->anim_init_locx = node->runtime->anim_ofsx = 0.0f;
}

View File

@ -247,7 +247,7 @@ static void node_socket_toggle(bNode *node, bNodeSocket &sock, bool deselect_nod
void node_deselect_all(SpaceNode &snode)
{
LISTBASE_FOREACH (bNode *, node, &snode.edittree->nodes) {
for (bNode *node : snode.edittree->all_nodes()) {
nodeSetSelected(node, false);
}
}
@ -259,7 +259,7 @@ void node_deselect_all_input_sockets(SpaceNode &snode, const bool deselect_nodes
* We can do that more efficiently here.
*/
LISTBASE_FOREACH (bNode *, node, &snode.edittree->nodes) {
for (bNode *node : snode.edittree->all_nodes()) {
bool sel = false;
LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
@ -289,7 +289,7 @@ void node_deselect_all_output_sockets(SpaceNode &snode, const bool deselect_node
* We can do that more efficiently here.
*/
LISTBASE_FOREACH (bNode *, node, &snode.edittree->nodes) {
for (bNode *node : snode.edittree->all_nodes()) {
bool sel = false;
LISTBASE_FOREACH (bNodeSocket *, socket, &node->outputs) {
@ -334,7 +334,7 @@ Set<bNode *> get_selected_nodes(bNodeTree &node_tree)
static bool node_select_grouped_type(bNodeTree &node_tree, bNode &node_act)
{
bool changed = false;
LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) {
for (bNode *node : node_tree.all_nodes()) {
if ((node->flag & SELECT) == 0) {
if (node->type == node_act.type) {
nodeSetSelected(node, true);
@ -348,7 +348,7 @@ static bool node_select_grouped_type(bNodeTree &node_tree, bNode &node_act)
static bool node_select_grouped_color(bNodeTree &node_tree, bNode &node_act)
{
bool changed = false;
LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) {
for (bNode *node : node_tree.all_nodes()) {
if ((node->flag & SELECT) == 0) {
if (compare_v3v3(node->color, node_act.color, 0.005f)) {
nodeSetSelected(node, true);
@ -375,7 +375,7 @@ static bool node_select_grouped_name(bNodeTree &node_tree, bNode &node_act, cons
suf_act = node_act.name;
}
LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) {
for (bNode *node : node_tree.all_nodes()) {
if (node->flag & SELECT) {
continue;
}
@ -501,7 +501,7 @@ void node_select_single(bContext &C, bNode &node)
const wmWindowManager *wm = CTX_wm_manager(&C);
bool active_texture_changed = false;
LISTBASE_FOREACH (bNode *, node_iter, &node_tree.nodes) {
for (bNode *node_iter : node_tree.all_nodes()) {
if (node_iter != &node) {
nodeSetSelected(node_iter, false);
}
@ -771,7 +771,7 @@ static int node_box_select_exec(bContext *C, wmOperator *op)
node_deselect_all(snode);
}
LISTBASE_FOREACH (bNode *, node, &node_tree.nodes) {
for (bNode *node : node_tree.all_nodes()) {
bool is_inside = false;
switch (node->type) {
@ -1326,7 +1326,7 @@ static void node_find_update_fn(const bContext *C,
StringSearch *search = BLI_string_search_new();
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
for (bNode *node : snode->edittree->all_nodes()) {
char name[256];
node_find_create_label(node, name, ARRAY_SIZE(name));
BLI_string_search_add(search, name, node, 0);

View File

@ -19,6 +19,7 @@
#include "BKE_lib_id.h"
#include "BKE_lib_remap.h"
#include "BKE_node.h"
#include "BKE_node_runtime.hh"
#include "BKE_screen.h"
#include "ED_node.h"
@ -330,7 +331,7 @@ static bool any_node_uses_id(const bNodeTree *ntree, const ID *id)
if (ELEM(nullptr, ntree, id)) {
return false;
}
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (const bNode *node : ntree->all_nodes()) {
if (node->id == id) {
return true;
}

View File

@ -15,6 +15,7 @@
#include "BKE_context.h"
#include "BKE_node.h"
#include "BKE_node_runtime.hh"
#include "BKE_node_tree_update.h"
#include "BKE_report.h"
@ -128,8 +129,8 @@ static void createTransNodeData(bContext * /*C*/, TransInfo *t)
t->flag = t->flag & ~T_PROP_EDIT_ALL;
/* set transform flags on nodes */
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
if (node->flag & NODE_SELECT && is_node_parent_select(node) == false) {
for (bNode *node : snode->edittree->all_nodes()) {
if (node->flag & NODE_SELECT && !is_node_parent_select(node)) {
node->flag |= NODE_TRANSFORM;
tc->data_len++;
}
@ -145,7 +146,7 @@ static void createTransNodeData(bContext * /*C*/, TransInfo *t)
TransData *td = tc->data = MEM_cnew_array<TransData>(tc->data_len, __func__);
TransData2D *td2d = tc->data_2d = MEM_cnew_array<TransData2D>(tc->data_len, __func__);
LISTBASE_FOREACH (bNode *, node, &snode->edittree->nodes) {
for (bNode *node : snode->edittree->all_nodes()) {
if (node->flag & NODE_TRANSFORM) {
NodeToTransData(td++, td2d++, node, dpi_fac);
}

View File

@ -78,7 +78,7 @@ void activate_geometry_node(Main &bmain, SpaceNode &snode, bNode &node)
if (wm == nullptr) {
return;
}
LISTBASE_FOREACH (bNode *, iter_node, &snode.edittree->nodes) {
for (bNode *iter_node : snode.edittree->all_nodes()) {
if (iter_node->type == GEO_NODE_VIEWER) {
SET_FLAG_FROM_TEST(iter_node->flag, iter_node == &node, NODE_DO_OUTPUT);
}

View File

@ -9,6 +9,7 @@
#include "BKE_image_format.h"
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_node_runtime.hh"
#include "IMB_colormanagement.h"
@ -454,7 +455,7 @@ static bNode *traverse_channel(bNodeSocket *input, const short target_type)
* material's node tree. Returns null if no instance of either type was found. */
static bNode *find_bsdf_node(Material *material)
{
LISTBASE_FOREACH (bNode *, node, &material->nodetree->nodes) {
for (bNode *node : material->nodetree->all_nodes()) {
if (ELEM(node->type, SH_NODE_BSDF_PRINCIPLED, SH_NODE_BSDF_DIFFUSE)) {
return node;
}

View File

@ -196,7 +196,7 @@ void ntreeCompositUpdateRLayers(bNodeTree *ntree)
return;
}
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->type == CMP_NODE_R_LAYERS) {
node_cmp_rlayers_outputs(ntree, node);
}
@ -213,7 +213,7 @@ void ntreeCompositTagRender(Scene *scene)
for (Scene *sce_iter = (Scene *)G_MAIN->scenes.first; sce_iter;
sce_iter = (Scene *)sce_iter->id.next) {
if (sce_iter->nodetree) {
LISTBASE_FOREACH (bNode *, node, &sce_iter->nodetree->nodes) {
for (bNode *node : sce_iter->nodetree->all_nodes()) {
if (node->id == (ID *)scene || node->type == CMP_NODE_COMPOSITE) {
BKE_ntree_update_tag_node_property(sce_iter->nodetree, node);
}
@ -233,7 +233,7 @@ void ntreeCompositClearTags(bNodeTree *ntree)
return;
}
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
node->runtime->need_exec = 0;
if (node->type == NODE_GROUP) {
ntreeCompositClearTags((bNodeTree *)node->id);

View File

@ -185,7 +185,7 @@ static bNode *node_get_active(bNodeTree *ntree, int sub_activity)
return nullptr;
}
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->flag & sub_activity) {
activetexnode = node;
/* if active we can return immediately */
@ -221,7 +221,7 @@ static bNode *node_get_active(bNodeTree *ntree, int sub_activity)
if (hasgroup) {
/* node active texture node in this tree, look inside groups */
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (bNode *node : ntree->all_nodes()) {
if (node->type == NODE_GROUP) {
bNode *tnode = node_get_active((bNodeTree *)node->id, sub_activity);
if (tnode && ((tnode->flag & sub_activity) || !inactivenode)) {

View File

@ -10,6 +10,7 @@
#include "BLI_utildefines.h"
#include "BKE_node.h"
#include "BKE_node_runtime.hh"
#include "NOD_common.h"
#include "node_common.h"
@ -24,7 +25,7 @@ static void group_gpu_copy_inputs(bNode *gnode, GPUNodeStack *in, bNodeStack *gs
{
bNodeTree *ngroup = (bNodeTree *)gnode->id;
LISTBASE_FOREACH (bNode *, node, &ngroup->nodes) {
for (bNode *node : ngroup->all_nodes()) {
if (node->type == NODE_GROUP_INPUT) {
int a;
LISTBASE_FOREACH_INDEX (bNodeSocket *, sock, &node->outputs, a) {
@ -44,7 +45,7 @@ static void group_gpu_move_outputs(bNode *gnode, GPUNodeStack *out, bNodeStack *
{
bNodeTree *ngroup = (bNodeTree *)gnode->id;
LISTBASE_FOREACH (bNode *, node, &ngroup->nodes) {
for (bNode *node : ngroup->all_nodes()) {
if (node->type == NODE_GROUP_OUTPUT && (node->flag & NODE_DO_OUTPUT)) {
int a;
LISTBASE_FOREACH_INDEX (bNodeSocket *, sock, &node->inputs, a) {

View File

@ -1046,7 +1046,7 @@ static int compositor_needs_render(Scene *sce, int this_scene)
return 1;
}
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (const bNode *node : ntree->all_nodes()) {
if (node->type == CMP_NODE_R_LAYERS && (node->flag & NODE_MUTED) == 0) {
if (this_scene == 0 || node->id == nullptr || node->id == &sce->id) {
return 1;
@ -1071,7 +1071,7 @@ static void do_render_compositor_scenes(Render *re)
/* now foreach render-result node we do a full render */
/* results are stored in a way compositor will find it */
GSet *scenes_rendered = BLI_gset_ptr_new(__func__);
LISTBASE_FOREACH (bNode *, node, &re->scene->nodetree->nodes) {
for (bNode *node : re->scene->nodetree->all_nodes()) {
if (node->type == CMP_NODE_R_LAYERS && (node->flag & NODE_MUTED) == 0) {
if (node->id && node->id != (ID *)re->scene) {
Scene *scene = (Scene *)node->id;
@ -1400,7 +1400,7 @@ static bool check_valid_compositing_camera(Scene *scene,
ReportList *reports)
{
if (scene->r.scemode & R_DOCOMP && scene->use_nodes) {
LISTBASE_FOREACH (bNode *, node, &scene->nodetree->nodes) {
for (bNode *node : scene->nodetree->all_nodes()) {
if (node->type == CMP_NODE_R_LAYERS && (node->flag & NODE_MUTED) == 0) {
Scene *sce = node->id ? (Scene *)node->id : scene;
if (sce->camera == nullptr) {
@ -1508,15 +1508,15 @@ static int check_valid_camera(Scene *scene, Object *camera_override, ReportList
return true;
}
static bool node_tree_has_compositor_output(bNodeTree *ntree)
static bool node_tree_has_compositor_output(const bNodeTree *ntree)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
for (const bNode *node : ntree->all_nodes()) {
if (ELEM(node->type, CMP_NODE_COMPOSITE, CMP_NODE_OUTPUT_FILE)) {
return true;
}
if (ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP)) {
if (node->id) {
if (node_tree_has_compositor_output((bNodeTree *)node->id)) {
if (node_tree_has_compositor_output((const bNodeTree *)node->id)) {
return true;
}
}