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:
@@ -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
|
||||
|
||||
@@ -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). */
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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. */
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user