From e3afead9aa4677ea91e3c41bbaf814533361cec2 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Tue, 6 Sep 2022 14:57:44 +0200 Subject: Fix (unreported) bad handling of embedded IDs on owner copying. Completely forgot in rBcd49fee74114 to handle the owner ID copying case (this code now also needs to re-assign to `owner_id` pointer of the newly copied embedded IDs to their rightful owner). --- source/blender/blenkernel/intern/light.c | 1 + source/blender/blenkernel/intern/linestyle.c | 1 + source/blender/blenkernel/intern/material.c | 1 + source/blender/blenkernel/intern/scene.cc | 2 ++ source/blender/blenkernel/intern/simulation.cc | 1 + source/blender/blenkernel/intern/texture.c | 1 + source/blender/blenkernel/intern/world.c | 1 + 7 files changed, 8 insertions(+) (limited to 'source/blender') diff --git a/source/blender/blenkernel/intern/light.c b/source/blender/blenkernel/intern/light.c index 879e4e24928..de7224e5bf0 100644 --- a/source/blender/blenkernel/intern/light.c +++ b/source/blender/blenkernel/intern/light.c @@ -80,6 +80,7 @@ static void light_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int BKE_id_copy_ex( bmain, (ID *)la_src->nodetree, (ID **)&la_dst->nodetree, flag_private_id_data); } + la_dst->nodetree->owner_id = &la_dst->id; } if ((flag & LIB_ID_COPY_NO_PREVIEW) == 0) { diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c index 776fe06edf7..64dc48c0154 100644 --- a/source/blender/blenkernel/intern/linestyle.c +++ b/source/blender/blenkernel/intern/linestyle.c @@ -72,6 +72,7 @@ static void linestyle_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const (ID *)linestyle_src->nodetree, (ID **)&linestyle_dst->nodetree, flag_private_id_data); + linestyle_dst->nodetree->owner_id = &linestyle_dst->id; } LineStyleModifier *linestyle_modifier; diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index 442b31ff21e..e50eb9b0755 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -102,6 +102,7 @@ static void material_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const (ID **)&material_dst->nodetree, flag_private_id_data); } + material_dst->nodetree->owner_id = &material_dst->id; } if ((flag & LIB_ID_COPY_NO_PREVIEW) == 0) { diff --git a/source/blender/blenkernel/intern/scene.cc b/source/blender/blenkernel/intern/scene.cc index 71c77be5b46..005dd4326cc 100644 --- a/source/blender/blenkernel/intern/scene.cc +++ b/source/blender/blenkernel/intern/scene.cc @@ -250,6 +250,7 @@ static void scene_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int (ID *)scene_src->master_collection, (ID **)&scene_dst->master_collection, flag_private_id_data); + scene_dst->master_collection->owner_id = &scene_dst->id; } /* View Layers */ @@ -275,6 +276,7 @@ static void scene_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int (void *)(&scene_src->id), &scene_dst->id, ID_REMAP_SKIP_NEVER_NULL_USAGE | ID_REMAP_SKIP_USER_CLEAR); + scene_dst->nodetree->owner_id = &scene_dst->id; } if (scene_src->rigidbody_world) { diff --git a/source/blender/blenkernel/intern/simulation.cc b/source/blender/blenkernel/intern/simulation.cc index 6afb698bcc0..90cbb083e77 100644 --- a/source/blender/blenkernel/intern/simulation.cc +++ b/source/blender/blenkernel/intern/simulation.cc @@ -67,6 +67,7 @@ static void simulation_copy_data(Main *bmain, ID *id_dst, const ID *id_src, cons (ID *)simulation_src->nodetree, (ID **)&simulation_dst->nodetree, flag_private_id_data); + simulation_dst->nodetree->owner_id = &simulation_dst->id; } } diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c index d9e5887a9a8..8f64296da5a 100644 --- a/source/blender/blenkernel/intern/texture.c +++ b/source/blender/blenkernel/intern/texture.c @@ -96,6 +96,7 @@ static void texture_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const i BKE_id_copy_ex( bmain, (ID *)texture_src->nodetree, (ID **)&texture_dst->nodetree, flag_private_id_data); } + texture_dst->nodetree->owner_id = &texture_dst->id; } if ((flag & LIB_ID_COPY_NO_PREVIEW) == 0) { diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c index cc3ee06f539..5220577afbd 100644 --- a/source/blender/blenkernel/intern/world.c +++ b/source/blender/blenkernel/intern/world.c @@ -98,6 +98,7 @@ static void world_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int BKE_id_copy_ex( bmain, (ID *)wrld_src->nodetree, (ID **)&wrld_dst->nodetree, flag_private_id_data); } + wrld_dst->nodetree->owner_id = &wrld_dst->id; } BLI_listbase_clear(&wrld_dst->gpumaterial); -- cgit v1.2.3