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-10-04 11:56:49 +0300
committerBastien Montagne <bastien@blender.org>2022-10-04 11:56:49 +0300
commitc3003b4346fd5c5595bf0199ca1b97d01a695d68 (patch)
tree9b2316fd092e7e866fba88a064960cc4e0ea02ac /source/blender/blenkernel/intern/lib_override.cc
parent501fff40e8b8875198bb557f70f20528f3ab59a2 (diff)
Fix T101559: Rain Test Animation demo crashes Blender 3.3
Update to liboverride creation code to add support of keeping active object forgot to consider case when there is no known/given view layer. NOTE: due to differences in code, fix for 3.3 will be a bit different.
Diffstat (limited to 'source/blender/blenkernel/intern/lib_override.cc')
-rw-r--r--source/blender/blenkernel/intern/lib_override.cc20
1 files changed, 17 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/lib_override.cc b/source/blender/blenkernel/intern/lib_override.cc
index db8d88854df..e2f991a4026 100644
--- a/source/blender/blenkernel/intern/lib_override.cc
+++ b/source/blender/blenkernel/intern/lib_override.cc
@@ -1210,6 +1210,9 @@ static void lib_override_library_create_post_process(Main *bmain,
const Object *old_active_object,
const bool is_resync)
{
+ /* If there is an old active object, there should also always be a given view layer. */
+ BLI_assert(old_active_object == nullptr || view_layer != nullptr);
+
/* NOTE: We only care about local IDs here, if a linked object is not instantiated in any way we
* do not do anything about it. */
@@ -1269,7 +1272,12 @@ static void lib_override_library_create_post_process(Main *bmain,
}
}
- BKE_view_layer_synced_ensure(scene, view_layer);
+ if (view_layer != nullptr) {
+ BKE_view_layer_synced_ensure(scene, view_layer);
+ }
+ else {
+ BKE_scene_view_layers_synced_ensure(scene);
+ }
/* We need to ensure all new overrides of objects are properly instantiated. */
Collection *default_instantiating_collection = residual_storage;
@@ -1379,8 +1387,14 @@ bool BKE_lib_override_library_create(Main *bmain,
if (id_hierarchy_root_reference == nullptr) {
id_hierarchy_root_reference = id_root_reference;
}
- BKE_view_layer_synced_ensure(scene, view_layer);
- const Object *old_active_object = BKE_view_layer_active_object_get(view_layer);
+
+ /* While in theory it _should_ be enough to ensure sync of given viewlayer (if any), or at least
+ * of given scene, think for now it's better to get a fully synced Main at this point, this code
+ * may do some very wide remapping/data access in some cases. */
+ BKE_main_view_layers_synced_ensure(bmain);
+ const Object *old_active_object = (view_layer != nullptr) ?
+ BKE_view_layer_active_object_get(view_layer) :
+ nullptr;
const bool success = lib_override_library_create_do(bmain,
scene,