[Bf-blender-cvs] [fc9c818531d] master: Fix missing view layer sync in recent change to ED_view3d_datamask

Campbell Barton noreply at git.blender.org
Sun Jan 15 13:50:10 CET 2023


Commit: fc9c818531d8684d8fc35e0ee91f46afff507f0e
Author: Campbell Barton
Date:   Sun Jan 15 22:16:15 2023 +1100
Branches: master
https://developer.blender.org/rBfc9c818531d8684d8fc35e0ee91f46afff507f0e

Fix missing view layer sync in recent change to ED_view3d_datamask

Call BKE_view_layer_synced_ensure before getting the active object [0]
caused an assertion for tests in debug mode.

[0]: c158dd560e5399d8bfa7386790e7b43c9f91db8e

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

M	source/blender/editors/include/ED_view3d.h
M	source/blender/editors/render/render_opengl.cc
M	source/blender/editors/space_view3d/view3d_draw.cc
M	source/blender/windowmanager/intern/wm_event_system.cc

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

diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 35930d1a9b4..3526db5cb35 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -1104,13 +1104,15 @@ char ED_view3d_lock_view_from_index(int index);
 char ED_view3d_axis_view_opposite(char view);
 bool ED_view3d_lock(struct RegionView3D *rv3d);
 
-void ED_view3d_datamask(const struct ViewLayer *view_layer,
+void ED_view3d_datamask(const struct Scene *scene,
+                        struct ViewLayer *view_layer,
                         const struct View3D *v3d,
                         struct CustomData_MeshMasks *r_cddata_masks);
 /**
  * Goes over all modes and view3d settings.
  */
-void ED_view3d_screen_datamask(const struct ViewLayer *view_layer,
+void ED_view3d_screen_datamask(const struct Scene *scene,
+                               struct ViewLayer *view_layer,
                                const struct bScreen *screen,
                                struct CustomData_MeshMasks *r_cddata_masks);
 
diff --git a/source/blender/editors/render/render_opengl.cc b/source/blender/editors/render/render_opengl.cc
index d91f1a09beb..fe50513fa64 100644
--- a/source/blender/editors/render/render_opengl.cc
+++ b/source/blender/editors/render/render_opengl.cc
@@ -808,8 +808,10 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
     memset(&oglrender->scene->customdata_mask_modal,
            0,
            sizeof(oglrender->scene->customdata_mask_modal));
-    ED_view3d_datamask(
-        oglrender->view_layer, oglrender->v3d, &oglrender->scene->customdata_mask_modal);
+    ED_view3d_datamask(oglrender->scene,
+                       oglrender->view_layer,
+                       oglrender->v3d,
+                       &oglrender->scene->customdata_mask_modal);
 
     /* apply immediately in case we're rendering from a script,
      * running notifiers again will overwrite */
diff --git a/source/blender/editors/space_view3d/view3d_draw.cc b/source/blender/editors/space_view3d/view3d_draw.cc
index 95407afbeda..04559fb30dc 100644
--- a/source/blender/editors/space_view3d/view3d_draw.cc
+++ b/source/blender/editors/space_view3d/view3d_draw.cc
@@ -2407,7 +2407,8 @@ void ED_view3d_depths_free(ViewDepths *depths)
 /** \name Custom-data Utilities
  * \{ */
 
-void ED_view3d_datamask(const ViewLayer *view_layer,
+void ED_view3d_datamask(const Scene *scene,
+                        ViewLayer *view_layer,
                         const View3D *v3d,
                         CustomData_MeshMasks *r_cddata_masks)
 {
@@ -2428,6 +2429,7 @@ void ED_view3d_datamask(const ViewLayer *view_layer,
     }
   }
 
+  BKE_view_layer_synced_ensure(scene, view_layer);
   Object *obact = BKE_view_layer_active_object_get(view_layer);
   if (obact) {
     switch (obact->type) {
@@ -2450,7 +2452,8 @@ void ED_view3d_datamask(const ViewLayer *view_layer,
   }
 }
 
-void ED_view3d_screen_datamask(const ViewLayer *view_layer,
+void ED_view3d_screen_datamask(const Scene *scene,
+                               ViewLayer *view_layer,
                                const bScreen *screen,
                                CustomData_MeshMasks *r_cddata_masks)
 {
@@ -2459,7 +2462,8 @@ void ED_view3d_screen_datamask(const ViewLayer *view_layer,
   /* Check if we need UV or color data due to the view mode. */
   LISTBASE_FOREACH (const ScrArea *, area, &screen->areabase) {
     if (area->spacetype == SPACE_VIEW3D) {
-      ED_view3d_datamask(view_layer, static_cast<View3D *>(area->spacedata.first), r_cddata_masks);
+      ED_view3d_datamask(
+          scene, view_layer, static_cast<View3D *>(area->spacedata.first), r_cddata_masks);
     }
   }
 }
diff --git a/source/blender/windowmanager/intern/wm_event_system.cc b/source/blender/windowmanager/intern/wm_event_system.cc
index df1bdfdc4aa..c412006b819 100644
--- a/source/blender/windowmanager/intern/wm_event_system.cc
+++ b/source/blender/windowmanager/intern/wm_event_system.cc
@@ -423,10 +423,11 @@ void wm_event_do_depsgraph(bContext *C, bool is_after_open_file)
   /* Combine data-masks so one window doesn't disable UVs in another T26448. */
   CustomData_MeshMasks win_combine_v3d_datamask = {0};
   LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
-    const ViewLayer *view_layer = WM_window_get_active_view_layer(win);
+    const Scene *scene = WM_window_get_active_scene(win);
+    ViewLayer *view_layer = WM_window_get_active_view_layer(win);
     const bScreen *screen = WM_window_get_active_screen(win);
 
-    ED_view3d_screen_datamask(view_layer, screen, &win_combine_v3d_datamask);
+    ED_view3d_screen_datamask(scene, view_layer, screen, &win_combine_v3d_datamask);
   }
   /* Update all the dependency graphs of visible view layers. */
   LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {



More information about the Bf-blender-cvs mailing list