[Bf-blender-cvs] [ba64e99bf04] temp-T73411-view-layer-lazy-cache: Add ensure_sync before BKE_view_layer_base_find.

Jeroen Bakker noreply at git.blender.org
Thu Sep 8 11:56:20 CEST 2022


Commit: ba64e99bf0440f37cbcee094b48502d00949e492
Author: Jeroen Bakker
Date:   Thu Sep 8 11:52:02 2022 +0200
Branches: temp-T73411-view-layer-lazy-cache
https://developer.blender.org/rBba64e99bf0440f37cbcee094b48502d00949e492

Add ensure_sync before BKE_view_layer_base_find.

===================================================================

M	source/blender/blenkernel/BKE_collection.h
M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/intern/blendfile_link_append.c
M	source/blender/blenkernel/intern/collection.c
M	source/blender/blenkernel/intern/context.c
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/lib_override.cc
M	source/blender/blenkernel/intern/object.cc
M	source/blender/blenkernel/intern/rigidbody.c
M	source/blender/editors/animation/anim_markers.c
M	source/blender/editors/gpencil/gpencil_convert.c
M	source/blender/editors/include/ED_transform.h
M	source/blender/editors/interface/interface_ops.cc
M	source/blender/editors/mesh/editmesh_select.c
M	source/blender/editors/object/object_add.cc
M	source/blender/editors/object/object_bake_api.c
M	source/blender/editors/object/object_edit.c
M	source/blender/editors/object/object_modes.c
M	source/blender/editors/object/object_relations.c
M	source/blender/editors/object/object_select.c
M	source/blender/editors/render/render_preview.cc
M	source/blender/editors/screen/screen_edit.c
M	source/blender/editors/space_outliner/outliner_collections.cc
M	source/blender/editors/space_outliner/outliner_dragdrop.cc
M	source/blender/editors/space_outliner/outliner_draw.cc
M	source/blender/editors/space_outliner/outliner_select.cc
M	source/blender/editors/space_outliner/outliner_sync.cc
M	source/blender/editors/space_outliner/outliner_tools.cc
M	source/blender/editors/space_outliner/outliner_tree.cc
M	source/blender/editors/space_outliner/outliner_utils.cc
M	source/blender/editors/space_outliner/tree/tree_display.hh
M	source/blender/editors/space_outliner/tree/tree_display_view_layer.cc
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/editors/space_view3d/view3d_navigate.c
M	source/blender/editors/space_view3d/view3d_select.cc
M	source/blender/editors/transform/transform_generics.c
M	source/blender/editors/transform/transform_orientations.c
M	source/blender/editors/transform/transform_orientations.h
M	source/blender/io/alembic/intern/alembic_capi.cc
M	source/blender/io/collada/collada_utils.cpp
M	source/blender/io/stl/importer/stl_import.cc
M	source/blender/io/usd/intern/usd_capi_import.cc
M	source/blender/io/wavefront_obj/importer/obj_importer.cc
M	source/blender/makesrna/intern/rna_layer.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_collection.h b/source/blender/blenkernel/BKE_collection.h
index 19dbee38f36..dd7866d83e5 100644
--- a/source/blender/blenkernel/BKE_collection.h
+++ b/source/blender/blenkernel/BKE_collection.h
@@ -240,7 +240,8 @@ const char *BKE_collection_ui_name_get(struct Collection *collection);
  * Select all the objects in this Collection (and its nested collections) for this ViewLayer.
  * Return true if any object was selected.
  */
-bool BKE_collection_objects_select(struct ViewLayer *view_layer,
+bool BKE_collection_objects_select(const struct Scene *scene,
+                                   struct ViewLayer *view_layer,
                                    struct Collection *collection,
                                    bool deselect);
 
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index aecdf13e7d8..dcef62c1a78 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -196,10 +196,12 @@ bool BKE_scene_has_object(struct Scene *scene, struct Object *ob);
  * It also select the objects that are in nested collections.
  * \note Recursive.
  */
-bool BKE_layer_collection_objects_select(struct ViewLayer *view_layer,
+bool BKE_layer_collection_objects_select(const struct Scene *scene,
+                                         struct ViewLayer *view_layer,
                                          struct LayerCollection *lc,
                                          bool deselect);
-bool BKE_layer_collection_has_selected_objects(struct ViewLayer *view_layer,
+bool BKE_layer_collection_has_selected_objects(const struct Scene *scene,
+                                               struct ViewLayer *view_layer,
                                                struct LayerCollection *lc);
 bool BKE_layer_collection_has_layer_collection(struct LayerCollection *lc_parent,
                                                struct LayerCollection *lc_child);
@@ -240,7 +242,8 @@ void BKE_layer_collection_isolate_local(const struct Scene *scene,
  * Don't change the collection children enable/disable state,
  * but it may change it for the collection itself.
  */
-void BKE_layer_collection_set_visible(struct ViewLayer *view_layer,
+void BKE_layer_collection_set_visible(const struct Scene *scene,
+                                      struct ViewLayer *view_layer,
                                       struct LayerCollection *lc,
                                       bool visible,
                                       bool hierarchy);
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 048a2fcf48e..60dfc0af25f 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -285,6 +285,7 @@ void BKE_object_matrix_local_get(struct Object *ob, float r_mat[4][4]);
 bool BKE_object_pose_context_check(const struct Object *ob);
 struct Object *BKE_object_pose_armature_get(struct Object *ob);
 struct Object *BKE_object_pose_armature_get_visible(struct Object *ob,
+                                                    const struct Scene *scene,
                                                     struct ViewLayer *view_layer,
                                                     struct View3D *v3d);
 
diff --git a/source/blender/blenkernel/intern/blendfile_link_append.c b/source/blender/blenkernel/intern/blendfile_link_append.c
index d9ca1e74391..26fa33d5707 100644
--- a/source/blender/blenkernel/intern/blendfile_link_append.c
+++ b/source/blender/blenkernel/intern/blendfile_link_append.c
@@ -493,6 +493,7 @@ static void loose_data_instantiate_ensure_active_collection(
 static void loose_data_instantiate_object_base_instance_init(Main *bmain,
                                                              Collection *collection,
                                                              Object *ob,
+                                                             const Scene *scene,
                                                              ViewLayer *view_layer,
                                                              const View3D *v3d,
                                                              const int flag,
@@ -506,7 +507,7 @@ static void loose_data_instantiate_object_base_instance_init(Main *bmain,
   }
 
   BKE_collection_object_add(bmain, collection, ob);
-
+  BKE_view_layer_ensure_sync(scene, view_layer);
   Base *base = BKE_view_layer_base_find(view_layer, ob);
 
   if (v3d != NULL) {
@@ -686,8 +687,14 @@ static void loose_data_instantiate_collection_process(
       /* TODO: why is it OK to make this active here but not in other situations?
        * See other callers of #object_base_instance_init */
       const bool set_active = set_selected;
-      loose_data_instantiate_object_base_instance_init(
-          bmain, active_collection, ob, view_layer, v3d, lapp_context->params->flag, set_active);
+      loose_data_instantiate_object_base_instance_init(bmain,
+                                                       active_collection,
+                                                       ob,
+                                                       scene,
+                                                       view_layer,
+                                                       v3d,
+                                                       lapp_context->params->flag,
+                                                       set_active);
 
       /* Assign the collection. */
       ob->instance_collection = collection;
@@ -698,6 +705,7 @@ static void loose_data_instantiate_collection_process(
     else {
       /* Add collection as child of active collection. */
       BKE_collection_child_add(bmain, active_collection, collection);
+      BKE_view_layer_ensure_sync(scene, view_layer);
 
       if ((lapp_context->params->flag & FILE_AUTOSELECT) != 0) {
         LISTBASE_FOREACH (CollectionObject *, coll_ob, &collection->gobject) {
@@ -717,6 +725,7 @@ static void loose_data_instantiate_object_process(LooseDataInstantiateContext *i
 {
   BlendfileLinkAppendContext *lapp_context = instantiate_context->lapp_context;
   Main *bmain = lapp_context->params->bmain;
+  const Scene *scene = lapp_context->params->context.scene;
   ViewLayer *view_layer = lapp_context->params->context.view_layer;
   const View3D *v3d = lapp_context->params->context.v3d;
 
@@ -762,6 +771,7 @@ static void loose_data_instantiate_object_process(LooseDataInstantiateContext *i
     loose_data_instantiate_object_base_instance_init(bmain,
                                                      active_collection,
                                                      ob,
+                                                     scene,
                                                      view_layer,
                                                      v3d,
                                                      lapp_context->params->flag,
@@ -809,6 +819,7 @@ static void loose_data_instantiate_obdata_process(LooseDataInstantiateContext *i
     loose_data_instantiate_object_base_instance_init(bmain,
                                                      active_collection,
                                                      ob,
+                                                     scene,
                                                      view_layer,
                                                      v3d,
                                                      lapp_context->params->flag,
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index 6efe452e615..7d28533a875 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -852,7 +852,9 @@ void BKE_collection_object_cache_free(Collection *collection)
   collection_object_cache_free(collection);
 }
 
-Base *BKE_collection_or_layer_objects(const Scene *scene, ViewLayer *view_layer, Collection *collection)
+Base *BKE_collection_or_layer_objects(const Scene *scene,
+                                      ViewLayer *view_layer,
+                                      Collection *collection)
 {
   if (collection) {
     return BKE_collection_object_cache_get(collection).first;
@@ -1742,7 +1744,10 @@ Collection *BKE_collection_from_index(Scene *scene, const int index)
   return collection_from_index_recursive(master_collection, index, &index_current);
 }
 
-static bool collection_objects_select(ViewLayer *view_layer, Collection *collection, bool deselect)
+static bool collection_objects_select(const Scene *scene,
+                                      ViewLayer *view_layer,
+                                      Collection *collection,
+                                      bool deselect)
 {
   bool changed = false;
 
@@ -1750,6 +1755,7 @@ static bool collection_objects_select(ViewLayer *view_layer, Collection *collect
     return false;
   }
 
+  BKE_view_layer_ensure_sync(scene, view_layer);
   LISTBASE_FOREACH (CollectionObject *, cob, &collection->gobject) {
     Base *base = BKE_view_layer_base_find(view_layer, cob->ob);
 
@@ -1770,7 +1776,7 @@ static bool collection_objects_select(ViewLayer *view_layer, Collection *collect
   }
 
   LISTBASE_FOREACH (CollectionChild *, child, &collection->children) {
-    if (collection_objects_select(view_layer, collection, deselect)) {
+    if (collection_objects_select(scene, view_layer, collection, deselect)) {
       changed = true;
     }
   }
@@ -1778,16 +1784,19 @@ static bool collection_objects_select(ViewLayer *view_layer, Collection *collect
   return changed;
 }
 
-bool BKE_collection_objects_select(ViewLayer *view_layer, Collection *collection, bool deselect)
+bool BKE_collection_objects_select(const Scene *scene,
+                                   ViewLayer *view_layer,
+                                   Collection *collection,
+                                   bool deselect)
 {
   LayerCollection *layer_collection = BKE_layer_collection_first_from_scene_collection(view_layer,
                                                                                        collection);
 
   if (layer_collect

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list