[Bf-blender-cvs] [ee52944b57a] temp-T73411-view-layer-lazy-cache: Add ensure sync before calls to BKE_view_layer_edit_object_get.

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


Commit: ee52944b57a3850a47a9d37d713583bdda1bf0d8
Author: Jeroen Bakker
Date:   Tue Sep 6 21:17:50 2022 +0200
Branches: temp-T73411-view-layer-lazy-cache
https://developer.blender.org/rBee52944b57a3850a47a9d37d713583bdda1bf0d8

Add ensure sync before calls to BKE_view_layer_edit_object_get.

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

M	release/datafiles/locale
M	release/scripts/addons
M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/intern/DerivedMesh.cc
M	source/blender/blenkernel/intern/layer_utils.c
M	source/blender/blenkernel/intern/scene.cc
M	source/blender/editors/armature/pose_select.c
M	source/blender/editors/curve/editcurve_add.c
M	source/blender/editors/curve/editcurve_undo.c
M	source/blender/editors/curve/editfont_undo.c
M	source/blender/editors/gpencil/gpencil_mesh.cc
M	source/blender/editors/gpencil/gpencil_trace_ops.c
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_add.cc
M	source/blender/editors/object/object_edit.c
M	source/blender/editors/object/object_select.c
M	source/blender/editors/screen/screen_context.c
M	source/blender/editors/space_image/image_edit.c
M	source/blender/editors/space_image/space_image.c
M	source/blender/editors/space_info/info_stats.cc
M	source/blender/editors/space_outliner/outliner_sync.cc
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/editors/transform/transform.c
M	source/blender/makesrna/intern/rna_space.c
M	source/tools

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

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 1b891478f44..e025c0cd92c 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 1b891478f44dd047c3a92fda3ebd17fae1c3acd3
+Subproject commit e025c0cd92c6e5565977686e0cea512bce007bfa
diff --git a/release/scripts/addons b/release/scripts/addons
index 67f1fbca148..0cd92169d40 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 67f1fbca1482d9d9362a4001332e785c3fd5d230
+Subproject commit 0cd92169d40ae1c7e103ff269e850eaf1b901646
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index edeb3c3d5ee..aecdf13e7d8 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -507,7 +507,8 @@ struct Object **BKE_view_layer_array_selected_objects_params(
  * Returns NULL with it finds multiple other selected objects
  * as behavior in this case would be random from the user perspective.
  */
-struct Object *BKE_view_layer_non_active_selected_object(struct ViewLayer *view_layer,
+struct Object *BKE_view_layer_non_active_selected_object(const struct Scene *scene,
+                                                         struct ViewLayer *view_layer,
                                                          const struct View3D *v3d);
 
 #define BKE_view_layer_array_selected_objects(view_layer, v3d, r_len, ...) \
diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc b/source/blender/blenkernel/intern/DerivedMesh.cc
index faf057e5bfc..68cb5ff5033 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.cc
+++ b/source/blender/blenkernel/intern/DerivedMesh.cc
@@ -1744,6 +1744,7 @@ static void object_get_datamask(const Depsgraph *depsgraph,
                                 CustomData_MeshMasks *r_mask,
                                 bool *r_need_mapping)
 {
+  Scene *scene = DEG_get_evaluated_scene(depsgraph);
   ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph);
 
   DEG_get_customdata_mask_for_object(depsgraph, ob, r_mask);
@@ -1758,6 +1759,7 @@ static void object_get_datamask(const Depsgraph *depsgraph,
     return;
   }
 
+  BKE_view_layer_ensure_sync(scene, view_layer);
   Object *actob = BKE_view_layer_active_object_get(view_layer);
   if (actob) {
     actob = DEG_get_original_object(actob);
diff --git a/source/blender/blenkernel/intern/layer_utils.c b/source/blender/blenkernel/intern/layer_utils.c
index 150e6418bef..cdd337b5cc1 100644
--- a/source/blender/blenkernel/intern/layer_utils.c
+++ b/source/blender/blenkernel/intern/layer_utils.c
@@ -275,9 +275,11 @@ bool BKE_view_layer_filter_edit_mesh_has_edges(const Object *ob, void *UNUSED(us
   return false;
 }
 
-Object *BKE_view_layer_non_active_selected_object(struct ViewLayer *view_layer,
+Object *BKE_view_layer_non_active_selected_object(const struct Scene *scene,
+                                                  struct ViewLayer *view_layer,
                                                   const struct View3D *v3d)
 {
+  BKE_view_layer_ensure_sync(scene, view_layer);
   Object *ob_active = BKE_view_layer_active_object_get(view_layer);
   Object *ob_result = NULL;
   FOREACH_SELECTED_OBJECT_BEGIN (view_layer, v3d, ob_iter) {
diff --git a/source/blender/blenkernel/intern/scene.cc b/source/blender/blenkernel/intern/scene.cc
index 69748fded31..be6c064f151 100644
--- a/source/blender/blenkernel/intern/scene.cc
+++ b/source/blender/blenkernel/intern/scene.cc
@@ -2514,7 +2514,9 @@ static bool check_rendered_viewport_visible(Main *bmain)
 
 /* TODO(@campbellbarton): shouldn't we be able to use 'DEG_get_view_layer' here?
  * Currently this is nullptr on load, so don't. */
-static void prepare_mesh_for_viewport_render(Main *bmain, const ViewLayer *view_layer)
+static void prepare_mesh_for_viewport_render(Main *bmain,
+                                             const Scene *scene,
+                                             ViewLayer *view_layer)
 {
   /* This is needed to prepare mesh to be used by the render
    * engine from the viewport rendering. We do loading here
@@ -2524,7 +2526,7 @@ static void prepare_mesh_for_viewport_render(Main *bmain, const ViewLayer *view_
    * This makes it so viewport render engine doesn't need to
    * call loading of the edit data for the mesh objects.
    */
-
+  BKE_view_layer_ensure_sync(scene, view_layer);
   Object *obedit = BKE_view_layer_edit_object_get(view_layer);
   if (obedit) {
     Mesh *mesh = static_cast<Mesh *>(obedit->data);
@@ -2601,7 +2603,7 @@ static void scene_graph_update_tagged(Depsgraph *depsgraph, Main *bmain, bool on
     /* Uncomment this to check if graph was properly tagged for update. */
     // DEG_debug_graph_relations_validate(depsgraph, bmain, scene);
     /* Flush editing data if needed. */
-    prepare_mesh_for_viewport_render(bmain, view_layer);
+    prepare_mesh_for_viewport_render(bmain, scene, view_layer);
     /* Update all objects: drivers, matrices, etc. flags set
      * by depsgraph or manual, no layer check here, gets correct flushed. */
     DEG_evaluate_on_refresh(depsgraph);
diff --git a/source/blender/editors/armature/pose_select.c b/source/blender/editors/armature/pose_select.c
index f61f4857093..672e1e776dd 100644
--- a/source/blender/editors/armature/pose_select.c
+++ b/source/blender/editors/armature/pose_select.c
@@ -159,6 +159,7 @@ bool ED_armature_pose_select_pick_bone(const Scene *scene,
   }
 
   if (found) {
+    BKE_view_layer_ensure_sync(scene, view_layer);
     Object *ob_act = BKE_view_layer_active_object_get(view_layer);
     BLI_assert(BKE_view_layer_edit_object_get(view_layer) == NULL);
 
diff --git a/source/blender/editors/curve/editcurve_add.c b/source/blender/editors/curve/editcurve_add.c
index a21c8fc85f8..0817f3cb08d 100644
--- a/source/blender/editors/curve/editcurve_add.c
+++ b/source/blender/editors/curve/editcurve_add.c
@@ -496,6 +496,7 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
   struct Main *bmain = CTX_data_main(C);
   Scene *scene = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
+  BKE_view_layer_ensure_sync(scene, view_layer);
   Object *obedit = BKE_view_layer_edit_object_get(view_layer);
   ListBase *editnurb;
   Nurb *nu;
diff --git a/source/blender/editors/curve/editcurve_undo.c b/source/blender/editors/curve/editcurve_undo.c
index 7e95dd107ee..54beed836d0 100644
--- a/source/blender/editors/curve/editcurve_undo.c
+++ b/source/blender/editors/curve/editcurve_undo.c
@@ -160,7 +160,9 @@ static void undocurve_free_data(UndoCurve *uc)
 
 static Object *editcurve_object_from_context(bContext *C)
 {
+  Scene *scene = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
+  BKE_view_layer_ensure_sync(scene, view_layer);
   Object *obedit = BKE_view_layer_edit_object_get(view_layer);
   if (obedit && ELEM(obedit->type, OB_CURVES_LEGACY, OB_SURF)) {
     Curve *cu = obedit->data;
diff --git a/source/blender/editors/curve/editfont_undo.c b/source/blender/editors/curve/editfont_undo.c
index 06d2357dc89..d3fcf6fd21d 100644
--- a/source/blender/editors/curve/editfont_undo.c
+++ b/source/blender/editors/curve/editfont_undo.c
@@ -308,7 +308,9 @@ static void undofont_free_data(UndoFont *uf)
 
 static Object *editfont_object_from_context(bContext *C)
 {
+  Scene *scene = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
+  BKE_view_layer_ensure_sync(scene, view_layer);
   Object *obedit = BKE_view_layer_edit_object_get(view_layer);
   if (obedit && obedit->type == OB_FONT) {
     Curve *cu = obedit->data;
diff --git a/source/blender/editors/gpencil/gpencil_mesh.cc b/source/blender/editors/gpencil/gpencil_mesh.cc
index b27e1c75746..bb39ad2dfaa 100644
--- a/source/blender/editors/gpencil/gpencil_mesh.cc
+++ b/source/blender/editors/gpencil/gpencil_mesh.cc
@@ -213,7 +213,7 @@ static int gpencil_bake_mesh_animation_exec(bContext *C, wmOperator *op)
   bool newob = false;
 
   if (target == GP_TARGET_OB_SELECTED) {
-    ob_gpencil = BKE_view_layer_non_active_selected_object(CTX_data_view_layer(C), v3d);
+    ob_gpencil = BKE_view_layer_non_active_selected_object(scene, CTX_data_view_layer(C), v3d);
     if (ob_gpencil != nullptr) {
       if (ob_gpencil->type != OB_GPENCIL) {
         BKE_report(op->reports, RPT_WARNING, "Target object not a grease pencil, ignoring!");
diff --git a/source/blender/editors/gpencil/gpencil_trace_ops.c b/source/blender/editors/gpencil/gpencil_trace_ops.c
index f6e88e05d46..0e9de6b4d3b 100644
--- a/source/blender/editors/gpencil/gpencil_trace_ops.c
+++ b/source/blender/editors/gpencil/gpencil_trace_ops.c
@@ -300,9 +300,10 @@ static int gpencil_trace_image_exec(bContext *C, wmOperator *op)
 
   /* Create a new grease pencil object or reuse selected. */
   eGP_TargetObjectMode target = RNA_enum_get(op->ptr, "target");
-  job->ob_gpencil = (target == GP_TARGET_OB_SELECTED) ? BKE_view_layer_non_active_selected_object(
-                                                            CTX_data_view_layer(C), job->v3d) :
-                                                        NULL;
+  job->ob_gpencil = (target == GP_TARGET_OB_SELECTED) ?
+                        BKE_view_layer_non_active_selected_object(
+                            scene, CTX_data_view_layer(C), job->v3d) :
+                        NULL;
 
   if (job->ob_gpencil != NULL) {
     if (job->ob_gpencil->type != OB_GPENCIL) {
diff --git a/source/blender/editors/lattice/editlattice_undo.c b/source/blender/editors/lattice/editlattice_undo.c
index b815bfb737d..bbf8eefb28b 100644
--- a/source/blender/editors/lattice/editlattice_undo.c
+++ b/source/blender/editors/lattice/editlattice_undo.c
@@ -131,7 +131,9 @@ static int validate_undoLatt(void *data, void *edata)
 
 static Object *editlatt_object_from_context(bContext *C)
 {
+  Scene *scene = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
+  BKE_view_layer_ensure_sync(scene, view_layer);
   Object *obedit = BKE_view_layer_edit_object_get(view_layer);
   if (obedit && obedit->type == OB_LATTICE) {
     Lattice *lt = obedit->data;
diff --git a/source/blender/editors/mesh/editmesh_undo.c b/source/blender/editors

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list