diff options
-rw-r--r-- | source/blender/blenkernel/intern/library.c | 14 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/light.c | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/linestyle.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/material.c | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/texture.c | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/world.c | 4 |
7 files changed, 17 insertions, 17 deletions
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index f37d1dd5eed..bbee49e8150 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -1411,14 +1411,21 @@ void BKE_libblock_copy_ex(Main *bmain, const ID *id, ID **r_newid, int flag) { ID *new_id = *r_newid; + const bool is_private_id_data = (id->flag & LIB_PRIVATE_DATA) != 0; + BLI_assert((flag & LIB_ID_CREATE_NO_MAIN) != 0 || bmain != NULL); BLI_assert((flag & LIB_ID_CREATE_NO_MAIN) != 0 || (flag & LIB_ID_CREATE_NO_ALLOCATE) == 0); - BLI_assert((flag & LIB_ID_CREATE_NO_MAIN) == 0 || (flag & LIB_ID_CREATE_NO_USER_REFCOUNT) != 0); + if (!is_private_id_data) { + /* When we are handling private ID data, we might still want to manage usercounts, even though + * that ID data-block is actually outside of Main... */ + BLI_assert((flag & LIB_ID_CREATE_NO_MAIN) == 0 || + (flag & LIB_ID_CREATE_NO_USER_REFCOUNT) != 0); + } /* Never implicitly copy shapekeys when generating temp data outside of Main database. */ BLI_assert((flag & LIB_ID_CREATE_NO_MAIN) == 0 || (flag & LIB_ID_COPY_SHAPEKEY) == 0); /* 'Private ID' data handling. */ - if ((bmain != NULL) && (id->flag & LIB_PRIVATE_DATA) != 0) { + if ((bmain != NULL) && is_private_id_data) { flag |= LIB_ID_CREATE_NO_MAIN; } @@ -1467,7 +1474,8 @@ void BKE_libblock_copy_ex(Main *bmain, const ID *id, ID **r_newid, int flag) /* the duplicate should get a copy of the animdata */ if ((flag & LIB_ID_COPY_NO_ANIMDATA) == 0) { - BLI_assert((flag & LIB_ID_COPY_ACTIONS) == 0 || (flag & LIB_ID_CREATE_NO_MAIN) == 0); + BLI_assert((flag & LIB_ID_COPY_ACTIONS) == 0 || (flag & LIB_ID_CREATE_NO_MAIN) == 0 || + is_private_id_data); iat->adt = BKE_animdata_copy(bmain, iat->adt, flag); } else { diff --git a/source/blender/blenkernel/intern/light.c b/source/blender/blenkernel/intern/light.c index 05fcba5c30d..ea728f61733 100644 --- a/source/blender/blenkernel/intern/light.c +++ b/source/blender/blenkernel/intern/light.c @@ -78,10 +78,8 @@ Light *BKE_light_add(Main *bmain, const char *name) */ void BKE_light_copy_data(Main *bmain, Light *la_dst, const Light *la_src, const int flag) { - /* We never handle usercount here for own data. */ - const int flag_subdata = flag | LIB_ID_CREATE_NO_USER_REFCOUNT; /* We always need allocation of our private ID data. */ - const int flag_private_id_data = flag_subdata & ~LIB_ID_CREATE_NO_ALLOCATE; + const int flag_private_id_data = flag & ~LIB_ID_CREATE_NO_ALLOCATE; la_dst->curfalloff = BKE_curvemapping_copy(la_src->curfalloff); diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c index 3436bd7a978..3efc493b43e 100644 --- a/source/blender/blenkernel/intern/linestyle.c +++ b/source/blender/blenkernel/intern/linestyle.c @@ -144,7 +144,7 @@ void BKE_linestyle_copy_data(struct Main *bmain, /* We never handle usercount here for own data. */ const int flag_subdata = flag | LIB_ID_CREATE_NO_USER_REFCOUNT; /* We always need allocation of our private ID data. */ - const int flag_private_id_data = flag_subdata & ~LIB_ID_CREATE_NO_ALLOCATE; + const int flag_private_id_data = flag & ~LIB_ID_CREATE_NO_ALLOCATE; for (int a = 0; a < MAX_MTEX; a++) { if (linestyle_src->mtex[a]) { diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index fc936e0fae2..73c278a0ab6 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -186,10 +186,8 @@ Material *BKE_material_add_gpencil(Main *bmain, const char *name) */ void BKE_material_copy_data(Main *bmain, Material *ma_dst, const Material *ma_src, const int flag) { - /* We never handle usercount here for own data. */ - const int flag_subdata = flag | LIB_ID_CREATE_NO_USER_REFCOUNT; /* We always need allocation of our private ID data. */ - const int flag_private_id_data = flag_subdata & ~LIB_ID_CREATE_NO_ALLOCATE; + const int flag_private_id_data = flag & ~LIB_ID_CREATE_NO_ALLOCATE; if (ma_src->nodetree) { BKE_id_copy_ex(bmain, (ID *)ma_src->nodetree, (ID **)&ma_dst->nodetree, flag_private_id_data); diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 5054a0d1a4f..71668f77efe 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -242,7 +242,7 @@ void BKE_scene_copy_data(Main *bmain, Scene *sce_dst, const Scene *sce_src, cons /* We never handle usercount here for own data. */ const int flag_subdata = flag | LIB_ID_CREATE_NO_USER_REFCOUNT; /* We always need allocation of our private ID data. */ - const int flag_private_id_data = flag_subdata & ~LIB_ID_CREATE_NO_ALLOCATE; + const int flag_private_id_data = flag & ~LIB_ID_CREATE_NO_ALLOCATE; sce_dst->ed = NULL; sce_dst->depsgraph_hash = NULL; diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index fb8697b1ee0..f4e89160487 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -317,10 +317,8 @@ MTex *BKE_texture_mtex_add_id(ID *id, int slot) */ void BKE_texture_copy_data(Main *bmain, Tex *tex_dst, const Tex *tex_src, const int flag) { - /* We never handle usercount here for own data. */ - const int flag_subdata = flag | LIB_ID_CREATE_NO_USER_REFCOUNT; /* We always need allocation of our private ID data. */ - const int flag_private_id_data = flag_subdata & ~LIB_ID_CREATE_NO_ALLOCATE; + const int flag_private_id_data = flag & ~LIB_ID_CREATE_NO_ALLOCATE; if (!BKE_texture_is_image_user(tex_src)) { tex_dst->ima = NULL; diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c index 9ad357290c4..992e4333049 100644 --- a/source/blender/blenkernel/intern/world.c +++ b/source/blender/blenkernel/intern/world.c @@ -98,10 +98,8 @@ World *BKE_world_add(Main *bmain, const char *name) */ void BKE_world_copy_data(Main *bmain, World *wrld_dst, const World *wrld_src, const int flag) { - /* We never handle usercount here for own data. */ - const int flag_subdata = flag | LIB_ID_CREATE_NO_USER_REFCOUNT; /* We always need allocation of our private ID data. */ - const int flag_private_id_data = flag_subdata & ~LIB_ID_CREATE_NO_ALLOCATE; + const int flag_private_id_data = flag & ~LIB_ID_CREATE_NO_ALLOCATE; if (wrld_src->nodetree) { BKE_id_copy_ex( |