[Bf-blender-cvs] [c9ff7f77a87] temp-T73411-view-layer-lazy-cache: Invoke ensure_sync for object_bases_get.

Jeroen Bakker noreply at git.blender.org
Tue Sep 6 21:18:10 CEST 2022


Commit: c9ff7f77a8711a2968e98ca33e73972430f0e289
Author: Jeroen Bakker
Date:   Tue Sep 6 20:38:35 2022 +0200
Branches: temp-T73411-view-layer-lazy-cache
https://developer.blender.org/rBc9ff7f77a8711a2968e98ca33e73972430f0e289

Invoke ensure_sync for object_bases_get.

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

M	source/blender/editors/animation/anim_filter.c
M	source/blender/editors/armature/editarmature_undo.c
M	source/blender/editors/curve/editcurve_undo.c
M	source/blender/editors/include/ED_object.h
M	source/blender/editors/include/ED_undo.h
M	source/blender/editors/lattice/editlattice_undo.c
M	source/blender/editors/mesh/editmesh_undo.c
M	source/blender/editors/metaball/editmball_undo.c
M	source/blender/editors/object/object_transform.cc
M	source/blender/editors/object/object_utils.c
M	source/blender/editors/render/render_internal.cc
M	source/blender/editors/render/render_preview.cc
M	source/blender/editors/screen/screen_context.c
M	source/blender/editors/space_nla/nla_channels.c
M	source/blender/editors/space_outliner/outliner_collections.cc
M	source/blender/editors/space_outliner/outliner_select.cc
M	source/blender/editors/space_outliner/outliner_tools.cc
M	source/blender/editors/space_outliner/tree/tree_display_view_layer.cc
M	source/blender/editors/space_view3d/view3d_navigate.c
M	source/blender/editors/space_view3d/view3d_select.cc
M	source/blender/editors/space_view3d/view3d_snap.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/editors/transform/transform_convert_object.c
M	source/blender/editors/transform/transform_gizmo_3d.c
M	source/blender/editors/transform/transform_snap_object.cc
M	source/blender/editors/undo/ed_undo.c
M	source/blender/io/alembic/exporter/abc_subdiv_disabler.cc
M	source/blender/io/collada/BlenderContext.cpp
M	source/blender/io/collada/BlenderContext.h
M	source/blender/io/collada/ExportSettings.h
M	source/blender/io/collada/SceneExporter.cpp
M	source/blender/io/gpencil/intern/gpencil_io_base.cc

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

diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c
index cc319e8585b..dbc478f7a27 100644
--- a/source/blender/editors/animation/anim_filter.c
+++ b/source/blender/editors/animation/anim_filter.c
@@ -3178,11 +3178,12 @@ static Base **animdata_filter_ds_sorted_bases(bDopeSheet *ads,
 {
   /* Create an array with space for all the bases, but only containing the usable ones */
   BKE_view_layer_ensure_sync(scene, view_layer);
-  size_t tot_bases = BLI_listbase_count(BKE_view_layer_object_bases_get(view_layer, __func__));
+  ListBase *object_bases = BKE_view_layer_object_bases_get(view_layer, __func__);
+  size_t tot_bases = BLI_listbase_count(object_bases);
   size_t num_bases = 0;
 
   Base **sorted_bases = MEM_mallocN(sizeof(Base *) * tot_bases, "Dopesheet Usable Sorted Bases");
-  LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
+  LISTBASE_FOREACH (Base *, base, object_bases) {
     if (animdata_filter_base_is_ok(ads, base, OB_MODE_OBJECT, filter_mode)) {
       sorted_bases[num_bases++] = base;
     }
@@ -3281,7 +3282,7 @@ static size_t animdata_filter_dopesheet(bAnimContext *ac,
      */
     Object *obact = BKE_view_layer_active_object_get(view_layer);
     const eObjectMode object_mode = obact ? obact->mode : OB_MODE_OBJECT;
-    LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
+    LISTBASE_FOREACH (Base *, base, object_bases) {
       if (animdata_filter_base_is_ok(ads, base, object_mode, filter_mode)) {
         /* since we're still here, this object should be usable */
         items += animdata_filter_dopesheet_ob(ac, anim_data, ads, base, filter_mode);
diff --git a/source/blender/editors/armature/editarmature_undo.c b/source/blender/editors/armature/editarmature_undo.c
index 8df09de76b3..4b2a4a989ab 100644
--- a/source/blender/editors/armature/editarmature_undo.c
+++ b/source/blender/editors/armature/editarmature_undo.c
@@ -141,9 +141,10 @@ static bool armature_undosys_step_encode(struct bContext *C, struct Main *bmain,
 
   /* Important not to use the 3D view when getting objects because all objects
    * outside of this list will be moved out of edit-mode when reading back undo steps. */
+  Scene *scene = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
   uint objects_len = 0;
-  Object **objects = ED_undo_editmode_objects_from_view_layer(view_layer, &objects_len);
+  Object **objects = ED_undo_editmode_objects_from_view_layer(scene, view_layer, &objects_len);
 
   us->elems = MEM_callocN(sizeof(*us->elems) * objects_len, __func__);
   us->elems_len = objects_len;
diff --git a/source/blender/editors/curve/editcurve_undo.c b/source/blender/editors/curve/editcurve_undo.c
index cd350e8bd3c..7e95dd107ee 100644
--- a/source/blender/editors/curve/editcurve_undo.c
+++ b/source/blender/editors/curve/editcurve_undo.c
@@ -202,9 +202,10 @@ static bool curve_undosys_step_encode(struct bContext *C, struct Main *bmain, Un
 
   /* Important not to use the 3D view when getting objects because all objects
    * outside of this list will be moved out of edit-mode when reading back undo steps. */
+  Scene *scene = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
   uint objects_len = 0;
-  Object **objects = ED_undo_editmode_objects_from_view_layer(view_layer, &objects_len);
+  Object **objects = ED_undo_editmode_objects_from_view_layer(scene, view_layer, &objects_len);
 
   us->elems = MEM_callocN(sizeof(*us->elems) * objects_len, __func__);
   us->elems_len = objects_len;
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index d8b78209a15..88a81f8f9d9 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -112,6 +112,7 @@ struct XFormObjectSkipChild_Container;
 struct XFormObjectSkipChild_Container *ED_object_xform_skip_child_container_create(void);
 void ED_object_xform_skip_child_container_item_ensure_from_array(
     struct XFormObjectSkipChild_Container *xcs,
+    const struct Scene *scene,
     struct ViewLayer *view_layer,
     struct Object **objects,
     uint objects_len);
diff --git a/source/blender/editors/include/ED_undo.h b/source/blender/editors/include/ED_undo.h
index 8c5f25e6b67..39bbd8adc75 100644
--- a/source/blender/editors/include/ED_undo.h
+++ b/source/blender/editors/include/ED_undo.h
@@ -15,6 +15,7 @@ extern "C" {
 struct Base;
 struct CLG_LogRef;
 struct Object;
+struct Scene;
 struct UndoStack;
 struct ViewLayer;
 struct bContext;
@@ -79,9 +80,12 @@ void ED_undo_object_editmode_restore_helper(struct bContext *C,
                                             uint object_array_len,
                                             uint object_array_stride);
 
-struct Object **ED_undo_editmode_objects_from_view_layer(struct ViewLayer *view_layer,
+struct Object **ED_undo_editmode_objects_from_view_layer(const struct Scene *scene,
+                                                         struct ViewLayer *view_layer,
                                                          uint *r_len);
-struct Base **ED_undo_editmode_bases_from_view_layer(struct ViewLayer *view_layer, uint *r_len);
+struct Base **ED_undo_editmode_bases_from_view_layer(const struct Scene *scene,
+                                                     struct ViewLayer *view_layer,
+                                                     uint *r_len);
 
 /**
  * Ideally we won't access the stack directly,
diff --git a/source/blender/editors/lattice/editlattice_undo.c b/source/blender/editors/lattice/editlattice_undo.c
index 64c03c217de..b815bfb737d 100644
--- a/source/blender/editors/lattice/editlattice_undo.c
+++ b/source/blender/editors/lattice/editlattice_undo.c
@@ -173,9 +173,10 @@ static bool lattice_undosys_step_encode(struct bContext *C, Main *bmain, UndoSte
 
   /* Important not to use the 3D view when getting objects because all objects
    * outside of this list will be moved out of edit-mode when reading back undo steps. */
+  Scene *scene = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
   uint objects_len = 0;
-  Object **objects = ED_undo_editmode_objects_from_view_layer(view_layer, &objects_len);
+  Object **objects = ED_undo_editmode_objects_from_view_layer(scene, view_layer, &objects_len);
 
   us->elems = MEM_callocN(sizeof(*us->elems) * objects_len, __func__);
   us->elems_len = objects_len;
diff --git a/source/blender/editors/mesh/editmesh_undo.c b/source/blender/editors/mesh/editmesh_undo.c
index 7bb1dc3723f..6a8b07f3109 100644
--- a/source/blender/editors/mesh/editmesh_undo.c
+++ b/source/blender/editors/mesh/editmesh_undo.c
@@ -771,10 +771,11 @@ static bool mesh_undosys_step_encode(struct bContext *C, struct Main *bmain, Und
 
   /* Important not to use the 3D view when getting objects because all objects
    * outside of this list will be moved out of edit-mode when reading back undo steps. */
+  Scene *scene = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
   ToolSettings *ts = CTX_data_tool_settings(C);
   uint objects_len = 0;
-  Object **objects = ED_undo_editmode_objects_from_view_layer(view_layer, &objects_len);
+  Object **objects = ED_undo_editmode_objects_from_view_layer(scene, view_layer, &objects_len);
 
   us->elems = MEM_callocN(sizeof(*us->elems) * objects_len, __func__);
   us->elems_len = objects_len;
diff --git a/source/blender/editors/metaball/editmball_undo.c b/source/blender/editors/metaball/editmball_undo.c
index 6b60967de48..01c33d3cdb2 100644
--- a/source/blender/editors/metaball/editmball_undo.c
+++ b/source/blender/editors/metaball/editmball_undo.c
@@ -150,9 +150,10 @@ static bool mball_undosys_step_encode(struct bContext *C, struct Main *bmain, Un
 
   /* Important not to use the 3D view when getting objects because all objects
    * outside of this list will be moved out of edit-mode when reading back undo steps. */
+  Scene *scene = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
   uint objects_len = 0;
-  Object **objects = ED_undo_editmode_objects_from_view_layer(view_layer, &objects_len);
+  Object **objects = ED_undo_editmode_objects_from_view_layer(scene, view_layer, &objects_len);
 
   us->elems = MEM_callocN(sizeof(*us->elems) * objects_len, __func__);
   us->elems_len = objects_len;
diff --git a/source/blender/editors/object/object_transform.cc b/source/blender/editors/object/object_transform.cc
index e4f96d95173..0a86ae28b3e 100644
--- a/source/blender/editors/object/object_transform.cc
+++ b/source/blender/editors/object/object_transform.cc
@@ -321,7 +321,7 @@ static int object_clear_transform_generic_exec(bContext *C,
     BKE_scene_graph_evaluated_ensure(depsgraph, bmain);
     xcs = ED_object_xform_skip_child_container_create();
     ED_object_xform_skip_child_container_item_ensure_from_array(
-        xcs, view_layer, objects.data(), objects.size());
+        xcs, scene, view_layer, objects.data(), objects.size());
   }
   if (use_transform_data_origin) {
     BKE_scene_graph_evaluated_ensure(depsgraph, bmain);
diff --git a/source/blender/editors/object/object_utils.c b/source/blender/editors/object/object_utils.c
index 3bd63a44641..e2d8041cb82 100644
--- a/source/blender/editors/object/object_utils.c
+++ b/source/blender/editors/object/object_utils.c
@@ -170,6 +170,7 @@ struct XFormObjectSkipChild_Container *ED_object_xform_skip_child_container_crea
 
 void ED_object_xform_skip_child_container_item_ensure_from_array(
     struct XFormObjectSkipChild_Container *xcs,
+    const Scene *scene,
     ViewLayer *view_layer,
     Object **objects,
     uint objects_len)
@@ -179,8 +180,9 @@ void ED_object_xform_skip_child_container_item_ensure_from_array(
     Object *ob = objects[ob_index];
     BLI_gset_add(objects_in_transdata, ob);
   }
-
-  LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
+  BKE_view_layer_ensure_sync(scene, view_layer);
+  ListBase *object_bases = BKE_view_layer_object_bases_get(view_layer, __func__);
+  LISTBASE_FOREACH (Base *, base, object_bases) {
     Object *ob = base->object;
     if (ob->parent != NU

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list