Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <bastien@blender.org>2022-05-04 18:05:12 +0300
committerBastien Montagne <bastien@blender.org>2022-05-04 18:29:50 +0300
commit60772baebf6cf4bb54bc7d04a758c78d639062cf (patch)
tree5f02de7b980d57ea13c085df085b533028c5f5b0
parentb5c3885bf05247cb1ddd4569ff13f55f40752d2f (diff)
Fix T97709: Compositor: Scenes are being set to no users after doing a full copy.
Similar issue/solution as in rB5188c14718c5 from this Monday actually, there may be more of those still lurking around... Quite surprising they all get reported now, this behavior has been in Blender since years.
-rw-r--r--source/blender/blenkernel/BKE_lib_remap.h4
-rw-r--r--source/blender/blenkernel/intern/scene.cc2
2 files changed, 4 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_lib_remap.h b/source/blender/blenkernel/BKE_lib_remap.h
index 57afbefd508..f62225179bd 100644
--- a/source/blender/blenkernel/BKE_lib_remap.h
+++ b/source/blender/blenkernel/BKE_lib_remap.h
@@ -57,7 +57,9 @@ enum {
ID_REMAP_FORCE_NEVER_NULL_USAGE = 1 << 3,
/** Do not remap library override pointers. */
ID_REMAP_SKIP_OVERRIDE_LIBRARY = 1 << 5,
- /** Don't touch the user count (use for low level actions such as swapping pointers). */
+ /** Don't touch the special user counts (use when the 'old' remapped ID remains in use):
+ * - Do not transfer 'fake user' status from old to new ID.
+ * - Do not clear 'extra user' from old ID. */
ID_REMAP_SKIP_USER_CLEAR = 1 << 6,
/**
* Force internal ID runtime pointers (like `ID.newid`, `ID.orig_id` etc.) to also be processed.
diff --git a/source/blender/blenkernel/intern/scene.cc b/source/blender/blenkernel/intern/scene.cc
index eed187b1b0a..e203d32a658 100644
--- a/source/blender/blenkernel/intern/scene.cc
+++ b/source/blender/blenkernel/intern/scene.cc
@@ -274,7 +274,7 @@ static void scene_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int
scene_dst->nodetree,
(void *)(&scene_src->id),
&scene_dst->id,
- ID_REMAP_SKIP_NEVER_NULL_USAGE);
+ ID_REMAP_SKIP_NEVER_NULL_USAGE | ID_REMAP_SKIP_USER_CLEAR);
}
if (scene_src->rigidbody_world) {