81 .struct_size =
sizeof(
ID),
82 .name =
"LinkPlaceholder",
83 .name_plural =
"link_placeholders",
86 .asset_type_info =
NULL,
93 .foreach_cache =
NULL,
98 .blend_read_data =
NULL,
99 .blend_read_lib =
NULL,
100 .blend_read_expand =
NULL,
102 .blend_read_undo_preserve =
NULL,
104 .lib_override_apply_post =
NULL,
119 const char *path_src)
124 const char *base_new =
data[0];
125 const char *base_old =
data[1];
128 CLOG_ERROR(&
LOG,
"old base path '%s' is not absolute.", base_old);
162 .user_data = (
void *)bpath_user_data},
182 if (id_in_mainlist) {
193 if (id_in_mainlist) {
245 id->lib->parent =
NULL;
265 if (
id->
us <= limit) {
268 "ID user count error: %s (from '%s')",
318 if (
id->
us <= limit) {
323 "ID user decrement error: %s (from '%s'): %d <= %d",
383 if (master_collection !=
NULL) {
394 int const cb_flag = cb_data->
cb_flag;
419 if (*id_pointer && *id_pointer != id_self &&
445 struct Main *bmain,
struct ID *
id,
int flags,
bool *r_force_local,
bool *r_force_copy)
449 BLI_assert(force_copy ==
false || force_copy != force_local);
451 if (force_local || force_copy) {
453 *r_force_local = force_local;
454 *r_force_copy = force_copy;
459 bool is_local =
false, is_lib =
false;
470 if (!lib_local && !is_local && !is_lib) {
473 else if (lib_local || is_local) {
482 *r_force_local = force_local;
483 *r_force_copy = force_copy;
492 bool force_local, force_copy;
499 else if (force_copy) {
504 if (id_new !=
NULL) {
510 if (key && key_new) {
514 if (
ntree && ntree_new) {
519 *master_collection_new = ((
Scene *)id_new)->master_collection;
520 if (master_collection && master_collection_new) {
521 ID_NEW_SET(master_collection, master_collection_new);
545 if (idtype_info ==
NULL) {
572 ID *
id = *id_pointer;
573 const int cb_flag = cb_data->
cb_flag;
577 if (
id ==
data->id_src) {
579 id = *id_pointer =
data->id_dst;
598 #define LIB_ID_TYPES_NOCOPY ID_LI, ID_SCR, ID_WM, ID_WS
602 #undef LIB_ID_TYPES_NOCOPY
607 ID *newid = (r_newid !=
NULL) ? *r_newid :
NULL;
616 memset(newid, 0,
size);
627 if (idtype_info !=
NULL) {
657 newid->
lib =
id->lib;
660 if (r_newid !=
NULL) {
675 const int copy_flags)
702 if (key_new !=
NULL) {
721 const size_t id_struct_size = id_type->
struct_size;
723 const ID id_a_back = *id_a;
724 const ID id_b_back = *id_b;
726 char *id_swap_buff = alloca(id_struct_size);
728 memcpy(id_swap_buff, id_a, id_struct_size);
729 memcpy(id_a, id_b, id_struct_size);
730 memcpy(id_b, id_swap_buff, id_struct_size);
754 id_swap(bmain, id_a, id_b,
false);
759 id_swap(bmain, id_a, id_b,
true);
803 const int cb_flag = cb_data->
cb_flag;
817 const int cb_flag = cb_data->
cb_flag;
913 const int ntag = ~tag;
950 const int nflag = ~
flag;
980 ID **id_array =
MEM_mallocN(
sizeof(*id_array) * lb_len, __func__);
989 for (i = 0; i < lb_len; i++) {
1026 if (id_type ==
NULL) {
1034 *name = id_type->
name;
1119 if (idtype_info !=
NULL) {
1131 id->runtime.remap.status = 0;
1132 id->runtime.remap.skipped_refcounted = 0;
1133 id->runtime.remap.skipped_direct = 0;
1134 id->runtime.remap.skipped_indirect = 0;
1191 ID *new_id = *r_newid;
1192 int flag = orig_flag;
1201 if ((bmain !=
NULL) && is_private_id_data) {
1229 const size_t id_offset =
sizeof(
ID);
1230 if ((
int)id_len - (int)id_offset > 0) {
1231 const char *cp = (
const char *)
id;
1232 char *cpn = (
char *)new_id;
1234 memcpy(cpn + id_offset, cp + id_offset, id_len - id_offset);
1237 new_id->
flag = (new_id->
flag & ~copy_idflag_mask) | (
id->
flag & copy_idflag_mask);
1320 #define ID_SORT_STEP_SIZE 512
1335 ID *id_sorting_hint_next = id_sorting_hint->
next;
1337 (id_sorting_hint_next ==
NULL || id_sorting_hint_next->
lib !=
id->
lib ||
1343 ID *id_sorting_hint_prev = id_sorting_hint->
prev;
1345 (id_sorting_hint_prev ==
NULL || id_sorting_hint_prev->
lib !=
id->
lib ||
1353 int item_array_index;
1360 bool is_in_library =
false;
1362 for (idtest = lb->
last; idtest !=
NULL; idtest = idtest->
prev) {
1363 if (is_in_library) {
1372 is_in_library =
true;
1375 if (!is_in_library) {
1379 item_array[item_array_index] = idtest;
1380 if (item_array_index == 0) {
1396 for (item_array_index++; item_array_index <
ID_SORT_STEP_SIZE; item_array_index++) {
1397 idtest = item_array[item_array_index];
1404 if (idtest ==
NULL) {
1424 #undef ID_SORT_STEP_SIZE
1428 struct Main *bmain,
ListBase *lb,
ID *
id,
const char *tname,
const bool do_linked_data)
1442 if (tname ==
NULL) {
1443 tname =
id->name + 2;
1448 if (
name[0] ==
'\0') {
1478 const int cb_flag = cb_data->
cb_flag;
1481 if (*id_pointer ==
NULL) {
1539 from_id_entry = from_id_entry->next) {
1546 ID *from_id = from_id_entry->id_pointer.from;
1552 from_id = ((
Key *)from_id)->from;
1596 GHash *old_to_new_ids,
1597 const bool untagged_only,
1598 const bool set_fake)
1616 printf(
"Pre-compute current ID relations: Done.\n");
1628 for (;
id;
id =
id->
next) {
1678 printf(
"Step 1: Detect data-blocks to make local: Done.\n");
1697 printf(
"Step 2: Check which data-blocks we can directly make local: Done.\n");
1704 for (
LinkNode *it = todo_ids, *it_next; it; it = it_next) {
1744 printf(
"Step 3: Make IDs local: Done.\n");
1768 if (old_to_new_ids) {
1781 printf(
"Step 4: Remap local usages of old (linked) ID to new (local) ID: Done.\n");
1800 printf(
"Hack: Forcefully rebuild armature object poses: Done.\n");
1808 printf(
"Cleanup and finish: Done.\n");
1847 const size_t idname_len = strlen(
id->
name + 2);
1848 const size_t libname_len = strlen(
id->
lib->
id.
name + 2);
1850 name[idname_len] = separator_char ? separator_char :
' ';
1851 name[idname_len + 1] =
'[';
1853 name[idname_len + 2 + libname_len] =
']';
1854 name[idname_len + 2 + libname_len + 1] =
'\0';
1860 const bool add_lib_hint,
1861 char separator_char,
1888 const char ascii_len = strlen(
id->
lib->
id.
name + 2) + 32;
1941 if (order_a && order_b) {
1942 if (*order_a < *order_b) {
1945 if (*order_a > *order_b) {
1950 return strcmp(id_a->
name, id_b->
name);
1988 if (*
order > relative_order) {
1993 *id_order = relative_order + 1;
1999 if (*
order < relative_order) {
2004 *id_order = relative_order - 1;
2032 if (opop->subitem_reference_name) {
2035 if (opop->subitem_local_name) {
void BKE_animdata_duplicate_id_action(struct Main *bmain, struct ID *id, uint duplicate_flags)
bool id_can_have_animdata(const struct ID *id)
struct AnimData * BKE_animdata_copy(struct Main *bmain, struct AnimData *adt, int flag)
void BKE_pose_rebuild(struct Main *bmain, struct Object *ob, struct bArmature *arm, bool do_id_user)
void BKE_asset_metadata_write(struct BlendWriter *writer, struct AssetMetaData *asset_data)
void BKE_asset_metadata_free(struct AssetMetaData **asset_data)
void BKE_bpath_foreach_path_id(BPathForeachPathData *bpath_data, struct ID *id)
@ BKE_BPATH_FOREACH_PATH_SKIP_MULTIFILE
struct Main * CTX_data_main(const bContext *C)
struct IDProperty * IDP_CopyProperty_ex(const struct IDProperty *prop, int flag) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_BlendWrite(struct BlendWriter *writer, const struct IDProperty *prop)
const char * BKE_idtype_idcode_to_name(short idcode)
const struct IDTypeInfo * BKE_idtype_get_info_from_idcode(short id_code)
@ IDTYPE_FLAGS_NO_LIBLINKING
bool BKE_idtype_idcode_is_linkable(short idcode)
const struct IDTypeInfo * BKE_idtype_get_info_from_id(const struct ID *id)
struct Key * BKE_key_from_id(struct ID *id)
@ LIB_ID_CREATE_NO_ALLOCATE
@ LIB_ID_COPY_NO_LIB_OVERRIDE
@ LIB_ID_COPY_SET_COPIED_ON_WRITE
@ LIB_ID_CREATE_NO_USER_REFCOUNT
@ LIB_ID_COPY_NO_ANIMDATA
@ LIB_ID_CREATE_NO_DEG_TAG
@ LIB_ID_MAKELOCAL_FORCE_LOCAL
@ LIB_ID_MAKELOCAL_ASSET_DATA_CLEAR
@ LIB_ID_MAKELOCAL_FULL_LIBRARY
@ LIB_ID_MAKELOCAL_FORCE_COPY
#define MAX_ID_FULL_NAME_UI
#define MAIN_ID_SESSION_UUID_UNSET
void BKE_lib_override_library_make_local(struct ID *id)
void BKE_lib_override_library_copy(struct ID *dst_id, const struct ID *src_id, bool do_full_copy)
bool BKE_lib_override_library_is_system_defined(const struct Main *bmain, const struct ID *id)
void BKE_library_foreach_ID_link(struct Main *bmain, struct ID *id, LibraryIDLinkCallback callback, void *user_data, int flag)
void BKE_library_ID_test_usages(struct Main *bmain, void *idv, bool *is_used_local, bool *is_used_linked)
@ ID_REMAP_SKIP_NEVER_NULL_USAGE
@ ID_REMAP_SKIP_INDIRECT_USAGE
void void BKE_libblock_remap(struct Main *bmain, void *old_idv, void *new_idv, short remap_flags) ATTR_NONNULL(1
void BKE_libblock_relink_ex(struct Main *bmain, void *idv, void *old_idv, void *new_idv, short remap_flags) ATTR_NONNULL(1
#define FOREACH_MAIN_ID_END
int set_listbasepointers(struct Main *main, struct ListBase *lb[])
void BKE_main_unlock(struct Main *bmain)
const char * BKE_main_blendfile_path(const struct Main *bmain) ATTR_NONNULL()
void BKE_main_relations_create(struct Main *bmain, short flag)
void BKE_main_lock(struct Main *bmain)
void BKE_main_relations_free(struct Main *bmain)
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
struct ListBase * which_libbase(struct Main *bmain, short type)
void BKE_main_namemap_remove_name(struct Main *bmain, struct ID *id, const char *name) ATTR_NONNULL()
bool BKE_main_namemap_get_name(struct Main *bmain, struct ID *id, char *name) ATTR_NONNULL()
struct bNodeTree * ntreeFromID(struct ID *id)
API for Blender-side Rigid Body stuff.
void BKE_rigidbody_ensure_local_object(struct Main *bmain, struct Object *ob)
#define BLI_assert_msg(a, msg)
bool BLI_gset_haskey(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
GSet * BLI_gset_ptr_new(const char *info)
GSet * BLI_gset_str_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
unsigned int BLI_gset_len(const GSet *gs) ATTR_WARN_UNUSED_RESULT
void BLI_gset_insert(GSet *gs, void *key)
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
bool BLI_gset_add(GSet *gs, void *key)
bool BLI_gset_remove(GSet *gs, const void *key, GSetKeyFreeFP keyfreefp)
void BLI_linklist_prepend_nlink(LinkNode **listp, void *ptr, LinkNode *nlink) ATTR_NONNULL(1
void BLI_linklist_prepend_arena(LinkNode **listp, void *ptr, struct MemArena *ma) ATTR_NONNULL(1
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
struct LinkData * BLI_genericNodeN(void *data)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
void void BLI_listbase_sort(struct ListBase *listbase, int(*cmp)(const void *, const void *)) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_memarena_free(struct MemArena *ma) ATTR_NONNULL(1)
struct MemArena * BLI_memarena_new(size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(2) ATTR_MALLOC
bool BLI_path_is_rel(const char *path) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT
void BLI_path_normalize(const char *relabase, char *path) ATTR_NONNULL(2)
void BLI_path_rel(char *file, const char *relfile) ATTR_NONNULL()
bool BLI_path_abs(char *path, const char *basepath) ATTR_NONNULL()
size_t size_t char * BLI_sprintfN(const char *__restrict format,...) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_PRINTF_FORMAT(1
int BLI_strcasecmp(const char *s1, const char *s2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
int BLI_str_utf8_invalid_strip(char *str, size_t length) ATTR_NONNULL(1)
#define POINTER_FROM_INT(i)
#define POINTER_AS_INT(i)
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_write_string(BlendWriter *writer, const char *data_ptr)
#define BLO_write_struct_list(writer, struct_name, list_ptr)
#define BLT_I18NCONTEXT_ID_ID
#define CLOG_ERROR(clg_ref,...)
void DEG_id_type_tag(struct Main *bmain, short id_type)
void DEG_id_tag_update_ex(struct Main *bmain, struct ID *id, int flag)
void DEG_id_tag_update(struct ID *id, int flag)
void DEG_relations_tag_update(struct Main *bmain)
ID and Library types, which are fundamental for sdna.
#define ID_IS_OVERRIDE_LIBRARY_VIRTUAL(_id)
#define ID_FAKE_USERS(id)
@ ID_RECALC_COPY_ON_WRITE
#define ID_IS_OVERRIDE_LIBRARY_REAL(_id)
#define ID_IS_LINKED(_id)
#define ID_TYPE_IS_DEPRECATED(id_type)
@ LIB_TAG_NO_USER_REFCOUNT
@ LIB_TAG_COPIED_ON_WRITE
@ LIB_EMBEDDED_DATA_LIB_OVERRIDE
#define ID_IS_OVERRIDE_LIBRARY(_id)
#define ID_NEW_SET(_id, _idn)
#define ID_LINK_PLACEHOLDER
Object groups, one object can be in many groups at once.
@ GP_DATA_SHOW_ONIONSKINS
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint order
Read Guarded memory(de)allocation.
static void init_data(ModifierData *md)
Utility defines for timing/benchmarks.
#define TIMEIT_START(var)
#define TIMEIT_VALUE_PRINT(var)
Provides wrapper around system-specific atomic primitives, and some extensions (faked-atomic operatio...
ATOMIC_INLINE int32_t atomic_fetch_and_or_int32(int32_t *p, int32_t x)
ATOMIC_INLINE uint32_t atomic_add_and_fetch_uint32(uint32_t *p, uint32_t x)
ATOMIC_INLINE int32_t atomic_fetch_and_and_int32(int32_t *p, int32_t x)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void BKE_id_newptr_and_tag_clear(ID *id)
static uint global_session_uuid
void BKE_libblock_init_empty(ID *id)
void id_lib_extern(ID *id)
static bool lib_id_library_local_paths_callback(BPathForeachPathData *bpath_data, char *r_path_dst, const char *path_src)
void BKE_main_id_repair_duplicate_names_listbase(Main *bmain, ListBase *lb)
void BKE_lib_libblock_session_uuid_renew(ID *id)
ID * BKE_id_copy_for_duplicate(Main *bmain, ID *id, const eDupli_ID_Flags duplicate_flags, const int copy_flags)
static int id_copy_libmanagement_cb(LibraryIDLinkCallbackData *cb_data)
bool BKE_id_new_name_validate(struct Main *bmain, ListBase *lb, ID *id, const char *tname, const bool do_linked_data)
#define ID_SORT_STEP_SIZE
static int * id_order_get(ID *id)
void * BKE_libblock_copy(Main *bmain, const ID *id)
void BKE_id_tag_clear_atomic(ID *id, int tag)
void BKE_lib_id_clear_library_data(Main *bmain, ID *id, const int flags)
void * BKE_id_new_nomain(const short type, const char *name)
bool id_single_user(bContext *C, ID *id, PointerRNA *ptr, PropertyRNA *prop)
void BKE_main_id_tag_all(struct Main *mainvar, const int tag, const bool value)
void BLI_libblock_ensure_unique_name(Main *bmain, const char *name)
void BKE_id_full_name_get(char name[MAX_ID_FULL_NAME], const ID *id, char separator_char)
bool BKE_id_is_editable(const Main *bmain, const ID *id)
static int id_refcount_recompute_callback(LibraryIDLinkCallbackData *cb_data)
char * BKE_id_to_unique_string_key(const struct ID *id)
void BKE_libblock_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int orig_flag)
size_t BKE_libblock_get_alloc_info(short type, const char **name)
void BKE_main_id_flag_listbase(ListBase *lb, const int flag, const bool value)
void id_sort_by_name(ListBase *lb, ID *id, ID *id_sorting_hint)
static void lib_id_library_local_paths(Main *bmain, Library *lib, ID *id)
bool BKE_id_copy_is_allowed(const ID *id)
void BKE_libblock_management_main_remove(Main *bmain, void *idv)
static int libblock_management_us_plus(LibraryIDLinkCallbackData *cb_data)
void BKE_lib_id_expand_local(Main *bmain, ID *id, const int flags)
static int id_order_compare(const void *a, const void *b)
void BKE_id_tag_set_atomic(ID *id, int tag)
#define LIB_ID_TYPES_NOCOPY
void id_fake_user_set(ID *id)
void BKE_id_reorder(const ListBase *lb, ID *id, ID *relative, bool after)
void BKE_id_full_name_ui_prefix_get(char name[MAX_ID_FULL_NAME_UI], const ID *id, const bool add_lib_hint, char separator_char, int *r_prefix_len)
void * BKE_libblock_alloc_notest(short type)
void BKE_lib_id_swap(Main *bmain, ID *id_a, ID *id_b)
void BKE_main_id_flag_all(Main *bmain, const int flag, const bool value)
static int lib_id_expand_local_cb(LibraryIDLinkCallbackData *cb_data)
void * BKE_id_new(Main *bmain, const short type, const char *name)
void BKE_libblock_runtime_reset_remapping_status(ID *id)
void BKE_main_id_newptr_and_tag_clear(Main *bmain)
void BKE_library_make_local(Main *bmain, const Library *lib, GHash *old_to_new_ids, const bool untagged_only, const bool set_fake)
void BKE_libblock_rename(Main *bmain, ID *id, const char *name)
void id_us_ensure_real(ID *id)
void BKE_lib_id_make_local_generic(Main *bmain, ID *id, const int flags)
void id_fake_user_clear(ID *id)
void id_us_clear_real(ID *id)
void BKE_libblock_management_usercounts_set(Main *bmain, void *idv)
void BKE_main_lib_objects_recalc_all(Main *bmain)
ID * BKE_id_copy(Main *bmain, const ID *id)
void id_us_plus_no_lib(ID *id)
ID * BKE_libblock_find_name(struct Main *bmain, const short type, const char *name)
static void library_make_local_copying_check(ID *id, GSet *loop_tags, MainIDRelations *id_relations, GSet *done_ids)
void BKE_main_id_tag_listbase(ListBase *lb, const int tag, const bool value)
void BKE_main_id_tag_idcode(struct Main *mainvar, const short type, const int tag, const bool value)
void id_lib_indirect_weak_link(ID *id)
bool BKE_lib_id_make_local(Main *bmain, ID *id, const int flags)
IDTypeInfo IDType_ID_LINK_PLACEHOLDER
ID * BKE_id_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int flag)
void BKE_main_id_refcount_recompute(struct Main *bmain, const bool do_linked_only)
static int lib_id_clear_library_data_users_update_cb(LibraryIDLinkCallbackData *cb_data)
static int libblock_management_us_min(LibraryIDLinkCallbackData *cb_data)
void BKE_id_ordered_list(ListBase *ordered_lb, const ListBase *lb)
void BKE_id_blend_write(BlendWriter *writer, ID *id)
void BKE_libblock_management_main_add(Main *bmain, void *idv)
static void id_swap(Main *bmain, ID *id_a, ID *id_b, const bool do_full_id)
void BKE_lib_libblock_session_uuid_ensure(ID *id)
struct ID * BKE_libblock_find_session_uuid(Main *bmain, const short type, const uint32_t session_uuid)
void BKE_libblock_management_usercounts_clear(Main *bmain, void *idv)
void BKE_lib_id_make_local_generic_action_define(struct Main *bmain, struct ID *id, int flags, bool *r_force_local, bool *r_force_copy)
bool BKE_id_can_be_asset(const ID *id)
bool BKE_id_is_in_global_main(ID *id)
static void lib_id_copy_ensure_local(Main *bmain, const ID *old_id, ID *new_id, const int flags)
void BKE_lib_id_swap_full(Main *bmain, ID *id_a, ID *id_b)
void * BKE_libblock_alloc(Main *bmain, short type, const char *name, const int flag)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
bool RNA_property_editable(PointerRNA *ptr, PropertyRNA *prop)
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
void RNA_property_pointer_set(PointerRNA *ptr, PropertyRNA *prop, PointerRNA ptr_value, ReportList *reports)
void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
IDTypeCopyDataFunction copy_data
IDTypeInitDataFunction init_data
IDTypeMakeLocalFunction make_local
struct AssetMetaData * asset_data
IDOverrideLibrary * override_library
unsigned int session_uuid
struct LibraryWeakReference * library_weak_reference
struct UniqueName_Map * name_map
struct Library_Runtime runtime
struct MainIDRelationsEntryItem * from_ids
struct GHash * relations_from_pointers
char is_locked_for_linking
char is_memfile_undo_written
struct MainIDRelations * relations