Refactor: Core, give the IDWALK_CB_… enum an explicit name

Give the `IDWALK_CB_…` enum an explicit name:
`LibraryForeachIDCallbackFlag`. This way the flags are type-safe, and
it's known where values come from. This is much preferred (at least by
me) to just having `int flags`.

Uses of `0` have been replaced with `IDWALK_CB_NOP` as that has the same
value and is of the right type.

One invalid use of `IDWALK_NOP` was detected by this change, and is
replaced by `IDWALK_CB_NOP`.

This change might be incomplete; I gave the enum a name, fixed the
compiler errors, and then also updated assignments like `int cb_flag =
cb_data->cb_flag`. I might have missed some assignments to `int` though.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/131865
This commit is contained in:
Sybren A. Stüvel
2024-12-12 15:20:22 +01:00
parent 8dd1eb4e8f
commit efd2e762f7
31 changed files with 102 additions and 71 deletions

View File

@@ -9,6 +9,8 @@
#include "DNA_gpencil_modifier_types.h" /* Needed for all enum type definitions. */
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */
#ifdef __cplusplus
extern "C" {
#endif
@@ -24,7 +26,7 @@ struct Object;
typedef void (*GreasePencilIDWalkFunc)(void *user_data,
struct Object *ob,
struct ID **idpoin,
int cb_flag);
LibraryForeachIDCallbackFlag cb_flag);
/**
* Free grease pencil modifier data

View File

@@ -31,7 +31,7 @@ struct LibraryForeachIDData;
struct Main;
/* Tips for the callback for cases it's gonna to modify the pointer. */
enum {
enum LibraryForeachIDCallbackFlag {
IDWALK_CB_NOP = 0,
IDWALK_CB_NEVER_NULL = (1 << 0),
IDWALK_CB_NEVER_SELF = (1 << 1),
@@ -114,6 +114,7 @@ enum {
IDWALK_CB_OVERRIDE_LIBRARY_HIERARCHY_DEFAULT = (1 << 18),
};
ENUM_OPERATORS(LibraryForeachIDCallbackFlag, IDWALK_CB_OVERRIDE_LIBRARY_HIERARCHY_DEFAULT);
enum {
IDWALK_RET_NOP = 0,
@@ -146,7 +147,7 @@ struct LibraryIDLinkCallbackData {
*/
ID *self_id;
ID **id_pointer;
int cb_flag;
LibraryForeachIDCallbackFlag cb_flag;
};
/**
@@ -236,11 +237,13 @@ ENUM_OPERATORS(LibraryForeachIDFlag, IDWALK_DO_DEPRECATED_POINTERS);
* \return true if the iteration should be stopped, false otherwise.
*/
bool BKE_lib_query_foreachid_iter_stop(const LibraryForeachIDData *data);
void BKE_lib_query_foreachid_process(LibraryForeachIDData *data, ID **id_pp, int cb_flag);
void BKE_lib_query_foreachid_process(LibraryForeachIDData *data,
ID **id_pp,
LibraryForeachIDCallbackFlag cb_flag);
LibraryForeachIDFlag BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data);
Main *BKE_lib_query_foreachid_process_main_get(const LibraryForeachIDData *data);
int BKE_lib_query_foreachid_process_callback_flag_override(LibraryForeachIDData *data,
int cb_flag,
LibraryForeachIDCallbackFlag cb_flag,
bool do_replace);
/** Should typically only be used when processing deprecated ID types (like IPO ones). */

View File

@@ -25,6 +25,8 @@
#include "BLI_compiler_attrs.h"
#include "BLI_sys_types.h"
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag. */
struct BLI_mempool;
struct BlendThumbnail;
struct GHash;
@@ -59,7 +61,7 @@ struct MainIDRelationsEntryItem {
/* Session uid of the `id_pointer`. */
uint session_uid;
int usage_flag; /* Using IDWALK_ enums, defined in BKE_lib_query.hh */
LibraryForeachIDCallbackFlag usage_flag; /* Using IDWALK_ enums, defined in BKE_lib_query.hh */
};
struct MainIDRelationsEntry {

View File

@@ -11,6 +11,8 @@
#include "BLI_math_matrix_types.hh"
#include "BLI_span.hh"
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag. */
#include "DNA_modifier_types.h" /* Needed for all enum type definitions. */
#include "DNA_customdata_types.h"
@@ -128,7 +130,10 @@ enum ModifierTypeFlag {
};
ENUM_OPERATORS(ModifierTypeFlag, eModifierTypeFlag_AcceptsGreasePencil)
using IDWalkFunc = void (*)(void *user_data, Object *ob, ID **idpoin, int cb_flag);
using IDWalkFunc = void (*)(void *user_data,
Object *ob,
ID **idpoin,
LibraryForeachIDCallbackFlag cb_flag);
using TexWalkFunc = void (*)(void *user_data,
Object *ob,
ModifierData *md,

View File

@@ -17,6 +17,8 @@
#include "BLI_ordered_edge.hh"
#include "BLI_utildefines.h"
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag. */
#include "DNA_particle_types.h"
#ifdef __cplusplus
@@ -533,7 +535,7 @@ void particle_system_update(struct Depsgraph *depsgraph,
typedef void (*ParticleSystemIDFunc)(struct ParticleSystem *psys,
struct ID **idpoin,
void *userdata,
int cb_flag);
LibraryForeachIDCallbackFlag cb_flag);
void BKE_particlesystem_id_loop(struct ParticleSystem *psys,
ParticleSystemIDFunc func,

View File

@@ -9,6 +9,8 @@
#pragma once
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */
#ifdef __cplusplus
extern "C" {
#endif
@@ -59,7 +61,7 @@ void BKE_rigidbody_object_copy(struct Main *bmain,
typedef void (*RigidbodyWorldIDFunc)(struct RigidBodyWorld *rbw,
struct ID **idpoin,
void *userdata,
int cb_flag);
LibraryForeachIDCallbackFlag cb_flag);
void BKE_rigidbody_world_id_loop(struct RigidBodyWorld *rbw,
RigidbodyWorldIDFunc func,

View File

@@ -10,6 +10,8 @@
#include "BLI_compiler_attrs.h"
#include "DNA_shader_fx_types.h" /* Needed for all enum type definitions. */
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */
#ifdef __cplusplus
extern "C" {
#endif
@@ -54,7 +56,7 @@ typedef enum {
typedef void (*ShaderFxIDWalkFunc)(void *user_data,
struct Object *ob,
struct ID **idpoin,
int cb_flag);
LibraryForeachIDCallbackFlag cb_flag);
typedef void (*ShaderFxTexWalkFunc)(void *user_data,
struct Object *ob,
struct ShaderFxData *fx,

View File

@@ -259,7 +259,7 @@ static void action_foreach_id(ID *id, LibraryForeachIDData *data)
const LibraryForeachIDFlag flag = BKE_lib_query_foreachid_process_flags_get(data);
const bool is_readonly = flag & IDWALK_READONLY;
constexpr int idwalk_flags = IDWALK_CB_NEVER_SELF | IDWALK_CB_LOOPBACK;
constexpr LibraryForeachIDCallbackFlag idwalk_flags = IDWALK_CB_NEVER_SELF | IDWALK_CB_LOOPBACK;
Main *bmain = BKE_lib_query_foreachid_process_main_get(data);

View File

@@ -239,11 +239,11 @@ static void collection_foreach_id(ID *id, LibraryForeachIDData *data)
LISTBASE_FOREACH (CollectionParent *, parent, &collection->runtime.parents) {
/* XXX This is very weak. The whole idea of keeping pointers to private IDs is very bad
* anyway... */
const int cb_flag = ((parent->collection != nullptr &&
(data_flags & IDWALK_NO_ORIG_POINTERS_ACCESS) == 0 &&
(parent->collection->id.flag & ID_FLAG_EMBEDDED_DATA) != 0) ?
IDWALK_CB_EMBEDDED_NOT_OWNING :
IDWALK_CB_NOP);
const LibraryForeachIDCallbackFlag cb_flag =
((parent->collection != nullptr && (data_flags & IDWALK_NO_ORIG_POINTERS_ACCESS) == 0 &&
(parent->collection->id.flag & ID_FLAG_EMBEDDED_DATA) != 0) ?
IDWALK_CB_EMBEDDED_NOT_OWNING :
IDWALK_CB_NOP);
BKE_LIB_FOREACHID_PROCESS_IDSUPER(
data, parent->collection, IDWALK_CB_NEVER_SELF | IDWALK_CB_LOOPBACK | cb_flag);
}

View File

@@ -356,7 +356,7 @@ static void gpencil_modifier_foreach_ID_link(GpencilModifierData *md,
static void modifier_free_data_id_us_cb(void * /*user_data*/,
Object * /*ob*/,
ID **idpoin,
int cb_flag)
const LibraryForeachIDCallbackFlag cb_flag)
{
ID *id = *idpoin;
if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) {

View File

@@ -621,7 +621,7 @@ static int id_copy_libmanagement_cb(LibraryIDLinkCallbackData *cb_data)
{
ID **id_pointer = cb_data->id_pointer;
ID *id = *id_pointer;
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
IDCopyLibManagementData *data = static_cast<IDCopyLibManagementData *>(cb_data->user_data);
/* Remap self-references to new copied ID. */
@@ -1063,7 +1063,7 @@ bool id_single_user(bContext *C, ID *id, PointerRNA *ptr, PropertyRNA *prop)
static int libblock_management_us_plus(LibraryIDLinkCallbackData *cb_data)
{
ID **id_pointer = cb_data->id_pointer;
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
if (cb_flag & IDWALK_CB_USER) {
id_us_plus(*id_pointer);
}
@@ -1077,7 +1077,7 @@ static int libblock_management_us_plus(LibraryIDLinkCallbackData *cb_data)
static int libblock_management_us_min(LibraryIDLinkCallbackData *cb_data)
{
ID **id_pointer = cb_data->id_pointer;
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
if (cb_flag & IDWALK_CB_USER) {
id_us_min(*id_pointer);
}
@@ -1950,7 +1950,7 @@ void BKE_main_id_newptr_and_tag_clear(Main *bmain)
static int id_refcount_recompute_callback(LibraryIDLinkCallbackData *cb_data)
{
ID **id_pointer = cb_data->id_pointer;
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
const bool do_linked_only = bool(POINTER_AS_INT(cb_data->user_data));
if (*id_pointer == nullptr) {

View File

@@ -46,9 +46,9 @@ struct LibraryForeachIDData {
/** Flags controlling the behavior of the 'foreach id' looping code. */
LibraryForeachIDFlag flag;
/** Generic flags to be passed to all callback calls for current processed data. */
int cb_flag;
LibraryForeachIDCallbackFlag cb_flag;
/** Callback flags that are forbidden for all callback calls for current processed data. */
int cb_flag_clear;
LibraryForeachIDCallbackFlag cb_flag_clear;
/* Function to call for every ID pointers of current processed data, and its opaque user data
* pointer. */
@@ -68,18 +68,20 @@ bool BKE_lib_query_foreachid_iter_stop(const LibraryForeachIDData *data)
return (data->status & IDWALK_STOP) != 0;
}
void BKE_lib_query_foreachid_process(LibraryForeachIDData *data, ID **id_pp, int cb_flag)
void BKE_lib_query_foreachid_process(LibraryForeachIDData *data,
ID **id_pp,
LibraryForeachIDCallbackFlag cb_flag)
{
if (BKE_lib_query_foreachid_iter_stop(data)) {
return;
}
const int flag = data->flag;
const LibraryForeachIDFlag flag = data->flag;
ID *old_id = *id_pp;
/* Update the callback flags with the ones defined (or forbidden) in `data` by the generic
* caller code. */
cb_flag = ((cb_flag | data->cb_flag) & ~data->cb_flag_clear);
cb_flag = LibraryForeachIDCallbackFlag((cb_flag | data->cb_flag) & ~data->cb_flag_clear);
/* Update the callback flags with some extra information regarding overrides: all 'loopback',
* 'internal', 'embedded' etc. ID pointers are never overridable. */
@@ -127,11 +129,10 @@ Main *BKE_lib_query_foreachid_process_main_get(const LibraryForeachIDData *data)
return data->bmain;
}
int BKE_lib_query_foreachid_process_callback_flag_override(LibraryForeachIDData *data,
const int cb_flag,
const bool do_replace)
int BKE_lib_query_foreachid_process_callback_flag_override(
LibraryForeachIDData *data, const LibraryForeachIDCallbackFlag cb_flag, const bool do_replace)
{
const int cb_flag_backup = data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag_backup = data->cb_flag;
if (do_replace) {
data->cb_flag = cb_flag;
}
@@ -154,9 +155,10 @@ void BKE_lib_query_idpropertiesForeachIDLink_callback(IDProperty *id_prop, void
BLI_assert(id_prop->type == IDP_ID);
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
const int cb_flag = IDWALK_CB_USER | ((id_prop->flag & IDP_FLAG_OVERRIDABLE_LIBRARY) ?
0 :
IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE);
const LibraryForeachIDCallbackFlag cb_flag = IDWALK_CB_USER |
((id_prop->flag & IDP_FLAG_OVERRIDABLE_LIBRARY) ?
IDWALK_CB_NOP :
IDWALK_CB_OVERRIDE_LIBRARY_NOT_OVERRIDABLE);
BKE_LIB_FOREACHID_PROCESS_ID(data, id_prop->data.pointer, cb_flag);
}
@@ -164,7 +166,7 @@ void BKE_library_foreach_ID_embedded(LibraryForeachIDData *data, ID **id_pp)
{
/* Needed e.g. for callbacks handling relationships. This call should be absolutely read-only. */
ID *id = *id_pp;
const int flag = data->flag;
const LibraryForeachIDFlag flag = data->flag;
BKE_lib_query_foreachid_process(data, id_pp, IDWALK_CB_EMBEDDED);
if (BKE_lib_query_foreachid_iter_stop(data)) {
@@ -304,11 +306,11 @@ static bool library_foreach_ID_link(Main *bmain,
* In that case, we do not want to generate those 'generic flags' from our current sub-data ID
* (the node tree), but re-use those generated for the 'owner' ID (the material). */
if (inherit_data == nullptr) {
data.cb_flag = ID_IS_LINKED(id) ? IDWALK_CB_INDIRECT_USAGE : 0;
data.cb_flag = ID_IS_LINKED(id) ? IDWALK_CB_INDIRECT_USAGE : IDWALK_CB_NOP;
/* When an ID is defined as not reference-counting its ID usages, it should never do it. */
data.cb_flag_clear = (id->tag & ID_TAG_NO_USER_REFCOUNT) ?
IDWALK_CB_USER | IDWALK_CB_USER_ONE :
0;
IDWALK_CB_NOP;
}
else {
data.cb_flag = inherit_data->cb_flag;
@@ -519,7 +521,7 @@ struct IDUsersIter {
static int foreach_libblock_id_users_callback(LibraryIDLinkCallbackData *cb_data)
{
ID **id_p = cb_data->id_pointer;
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
IDUsersIter *iter = static_cast<IDUsersIter *>(cb_data->user_data);
if (*id_p) {
@@ -980,7 +982,7 @@ static int foreach_libblock_used_linked_data_tag_clear_cb(LibraryIDLinkCallbackD
{
ID *self_id = cb_data->self_id;
ID **id_p = cb_data->id_pointer;
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
bool *is_changed = static_cast<bool *>(cb_data->user_data);
if (*id_p) {

View File

@@ -173,7 +173,7 @@ static void foreach_libblock_remap_callback_apply(ID *id_owner,
static int foreach_libblock_remap_callback(LibraryIDLinkCallbackData *cb_data)
{
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
/* NOTE: Support remapping of `IDWALK_CB_EMBEDDED_NON_OWNING` pointers, this is necessary in some
* complex low-level ID manipulation cases (e.g. in ID swapping, see #BKE_lib_id_swap & co).
@@ -880,7 +880,7 @@ static void libblock_relink_to_newid_prepare_data(Main *bmain,
RelinkToNewIDData *relink_data);
static int id_relink_to_newid_looper(LibraryIDLinkCallbackData *cb_data)
{
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
/* NOTE: For now, support remapping `IDWALK_CB_EMBEDDED_NON_OWNING` pointers. */
if (cb_flag & (IDWALK_CB_EMBEDDED | IDWALK_CB_OVERRIDE_LIBRARY_REFERENCE)) {
return IDWALK_RET_NOP;

View File

@@ -491,7 +491,7 @@ static int main_relations_create_idlink_cb(LibraryIDLinkCallbackData *cb_data)
MainIDRelations *bmain_relations = static_cast<MainIDRelations *>(cb_data->user_data);
ID *self_id = cb_data->self_id;
ID **id_pointer = cb_data->id_pointer;
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
if (*id_pointer) {
MainIDRelationsEntry **entry_p;

View File

@@ -905,7 +905,7 @@ static int foreach_libblock_make_usercounts_callback(LibraryIDLinkCallbackData *
return IDWALK_RET_NOP;
}
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
if (cb_flag & IDWALK_CB_USER) {
id_us_plus(*id_p);
}

View File

@@ -167,7 +167,7 @@ ModifierData *BKE_modifier_new(int type)
static void modifier_free_data_id_us_cb(void * /*user_data*/,
Object * /*ob*/,
ID **idpoin,
int cb_flag)
const LibraryForeachIDCallbackFlag cb_flag)
{
ID *id = *idpoin;
if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) {
@@ -335,7 +335,7 @@ void BKE_modifier_copydata_generic(const ModifierData *md_src,
static void modifier_copy_data_id_us_cb(void * /*user_data*/,
Object * /*ob*/,
ID **idpoin,
int cb_flag)
const LibraryForeachIDCallbackFlag cb_flag)
{
ID *id = *idpoin;
if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) {

View File

@@ -350,17 +350,18 @@ static void object_free_data(ID *id)
static void library_foreach_modifiersForeachIDLink(void *user_data,
Object * /*object*/,
ID **id_pointer,
int cb_flag)
const LibraryForeachIDCallbackFlag cb_flag)
{
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
data, BKE_lib_query_foreachid_process(data, id_pointer, cb_flag));
}
static void library_foreach_gpencil_modifiersForeachIDLink(void *user_data,
Object * /*object*/,
ID **id_pointer,
int cb_flag)
static void library_foreach_gpencil_modifiersForeachIDLink(
void *user_data,
Object * /*object*/,
ID **id_pointer,
const LibraryForeachIDCallbackFlag cb_flag)
{
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
@@ -370,7 +371,7 @@ static void library_foreach_gpencil_modifiersForeachIDLink(void *user_data,
static void library_foreach_shaderfxForeachIDLink(void *user_data,
Object * /*object*/,
ID **id_pointer,
int cb_flag)
const LibraryForeachIDCallbackFlag cb_flag)
{
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
@@ -383,7 +384,7 @@ static void library_foreach_constraintObjectLooper(bConstraint * /*con*/,
void *user_data)
{
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
const int cb_flag = is_reference ? IDWALK_CB_USER : IDWALK_CB_NOP;
const LibraryForeachIDCallbackFlag cb_flag = is_reference ? IDWALK_CB_USER : IDWALK_CB_NOP;
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
data, BKE_lib_query_foreachid_process(data, id_pointer, cb_flag));
}
@@ -391,7 +392,7 @@ static void library_foreach_constraintObjectLooper(bConstraint * /*con*/,
static void library_foreach_particlesystemsObjectLooper(ParticleSystem * /*psys*/,
ID **id_pointer,
void *user_data,
int cb_flag)
const LibraryForeachIDCallbackFlag cb_flag)
{
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(

View File

@@ -5020,7 +5020,7 @@ struct ParticleSystemIDLoopForModifier {
static void particlesystem_modifiersForeachIDLink(void *user_data,
Object * /*object*/,
ID **id_pointer,
int cb_flag)
const LibraryForeachIDCallbackFlag cb_flag)
{
ParticleSystemIDLoopForModifier *data = (ParticleSystemIDLoopForModifier *)user_data;
data->func(data->psys, id_pointer, data->userdata, cb_flag);

View File

@@ -468,7 +468,7 @@ static void scene_free_data(ID *id)
static void scene_foreach_rigidbodyworldSceneLooper(RigidBodyWorld * /*rbw*/,
ID **id_pointer,
void *user_data,
int cb_flag)
const LibraryForeachIDCallbackFlag cb_flag)
{
LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(
@@ -787,7 +787,8 @@ static void scene_foreach_layer_collection(LibraryForeachIDData *data,
if ((data_flags & IDWALK_NO_ORIG_POINTERS_ACCESS) == 0 && lc->collection != nullptr) {
BLI_assert(is_master == ((lc->collection->id.flag & ID_FLAG_EMBEDDED_DATA) != 0));
}
const int cb_flag = is_master ? IDWALK_CB_EMBEDDED_NOT_OWNING : IDWALK_CB_NOP;
const LibraryForeachIDCallbackFlag cb_flag = is_master ? IDWALK_CB_EMBEDDED_NOT_OWNING :
IDWALK_CB_NOP;
BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, lc->collection, cb_flag | IDWALK_CB_DIRECT_WEAK_LINK);
scene_foreach_layer_collection(data, &lc->layer_collections, false);
}

View File

@@ -79,7 +79,7 @@ ShaderFxData *BKE_shaderfx_new(int type)
static void shaderfx_free_data_id_us_cb(void * /*user_data*/,
Object * /*ob*/,
ID **idpoin,
int cb_flag)
const LibraryForeachIDCallbackFlag cb_flag)
{
ID *id = *idpoin;
if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) {
@@ -175,7 +175,7 @@ void BKE_shaderfx_copydata_generic(const ShaderFxData *fx_src, ShaderFxData *fx_
static void shaderfx_copy_data_id_us_cb(void * /*user_data*/,
Object * /*ob*/,
ID **idpoin,
int cb_flag)
const LibraryForeachIDCallbackFlag cb_flag)
{
ID *id = *idpoin;
if (id != nullptr && (cb_flag & IDWALK_CB_USER) != 0) {

View File

@@ -1244,7 +1244,7 @@ static int write_id_direct_linked_data_process_cb(LibraryIDLinkCallbackData *cb_
{
ID *self_id = cb_data->self_id;
ID *id = *cb_data->id_pointer;
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
if (id == nullptr || !ID_IS_LINKED(id)) {
return IDWALK_RET_NOP;

View File

@@ -2316,7 +2316,7 @@ void DepsgraphNodeBuilder::build_scene_speakers(Scene *scene, ViewLayer *view_la
void DepsgraphNodeBuilder::modifier_walk(void *user_data,
Object * /*object*/,
ID **idpoin,
int /*cb_flag*/)
LibraryForeachIDCallbackFlag /*cb_flag*/)
{
BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
ID *id = *idpoin;

View File

@@ -10,6 +10,8 @@
#include "BLI_span.hh"
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */
#include "intern/builder/deg_builder.h"
#include "intern/builder/deg_builder_key.h"
#include "intern/builder/deg_builder_map.h"
@@ -311,7 +313,7 @@ class DepsgraphNodeBuilder : public DepsgraphBuilder {
static void modifier_walk(void *user_data,
struct Object *object,
struct ID **idpoin,
int cb_flag);
LibraryForeachIDCallbackFlag cb_flag);
static void constraint_walk(bConstraint *constraint,
ID **idpoin,
bool is_reference,

View File

@@ -3633,7 +3633,7 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDNode *id_node)
void DepsgraphRelationBuilder::modifier_walk(void *user_data,
Object * /*object*/,
ID **idpoin,
int /*cb_flag*/)
LibraryForeachIDCallbackFlag /*cb_flag*/)
{
BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
ID *id = *idpoin;

View File

@@ -21,6 +21,8 @@
#include "BLI_string.h"
#include "BLI_utildefines.h"
#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */
#include "intern/builder/deg_builder.h"
#include "intern/builder/deg_builder_key.h"
#include "intern/builder/deg_builder_map.h"
@@ -336,7 +338,7 @@ class DepsgraphRelationBuilder : public DepsgraphBuilder {
static void modifier_walk(void *user_data,
struct Object *object,
struct ID **idpoin,
int cb_flag);
LibraryForeachIDCallbackFlag cb_flag);
static void constraint_walk(bConstraint *con, ID **idpoin, bool is_reference, void *user_data);

View File

@@ -2770,7 +2770,10 @@ struct tAnimFilterModifiersContext {
};
/* dependency walker callback for modifier dependencies */
static void animfilter_modifier_idpoin_cb(void *afm_ptr, Object *ob, ID **idpoin, int /*cb_flag*/)
static void animfilter_modifier_idpoin_cb(void *afm_ptr,
Object *ob,
ID **idpoin,
LibraryForeachIDCallbackFlag /*cb_flag*/)
{
tAnimFilterModifiersContext *afm = (tAnimFilterModifiersContext *)afm_ptr;
ID *owner_id = &ob->id;

View File

@@ -579,7 +579,7 @@ static int gather_frames_to_render_for_id(LibraryIDLinkCallbackData *cb_data)
ID *id = *id_p;
ID *self_id = cb_data->self_id;
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
if (cb_flag == IDWALK_CB_LOOPBACK || id == self_id) {
/* IDs may end up referencing themselves one way or the other, and those
* (the self_id ones) have always already been processed. */

View File

@@ -503,10 +503,12 @@ static void outliner_foreach_id(SpaceLink *space_link, LibraryForeachIDData *dat
if (TSE_IS_REAL_ID(tselem)) {
/* NOTE: Outliner ID pointers are never `IDWALK_CB_DIRECT_WEAK_LINK`, they should never
* enforce keeping a reference to some linked data. */
const int cb_flag = (tselem->id != nullptr && allow_pointer_access &&
(tselem->id->flag & ID_FLAG_EMBEDDED_DATA) != 0) ?
IDWALK_CB_EMBEDDED_NOT_OWNING :
IDWALK_CB_NOP;
const LibraryForeachIDCallbackFlag cb_flag = (tselem->id != nullptr &&
allow_pointer_access &&
(tselem->id->flag & ID_FLAG_EMBEDDED_DATA) !=
0) ?
IDWALK_CB_EMBEDDED_NOT_OWNING :
IDWALK_CB_NOP;
BKE_LIB_FOREACHID_PROCESS_ID(data, tselem->id, cb_flag);
}
else if (!is_readonly) {

View File

@@ -261,7 +261,7 @@ static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void
{
SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
walk(user_data, ob, (ID **)&smd->target, IDWALK_NOP);
walk(user_data, ob, (ID **)&smd->target, IDWALK_CB_NOP);
}
static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)

View File

@@ -68,7 +68,7 @@ static int foreach_libblock_id_user_map_callback(LibraryIDLinkCallbackData *cb_d
if (*id_p) {
IDUserMapData *data = static_cast<IDUserMapData *>(cb_data->user_data);
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
if (data->types_bitmap) {
if (!id_check_type(*id_p, data->types_bitmap)) {

View File

@@ -3794,7 +3794,7 @@ static void previews_id_ensure(bContext *C, Scene *scene, ID *id)
static int previews_id_ensure_callback(LibraryIDLinkCallbackData *cb_data)
{
const int cb_flag = cb_data->cb_flag;
const LibraryForeachIDCallbackFlag cb_flag = cb_data->cb_flag;
if (cb_flag & (IDWALK_CB_EMBEDDED | IDWALK_CB_EMBEDDED_NOT_OWNING)) {
return IDWALK_RET_NOP;