diff options
author | Jeroen Bakker <jeroen@blender.org> | 2022-09-08 11:20:26 +0300 |
---|---|---|
committer | Jeroen Bakker <jeroen@blender.org> | 2022-09-08 11:20:26 +0300 |
commit | 5b5e2d47737c2e2203ac82e3f5e7e80bb4703480 (patch) | |
tree | cd468ee7f27400e8ff61ab75eab8f9d6daf8a316 /source | |
parent | a64edb19ac59a723c8e2b22c3a4132b726084905 (diff) |
Add ensure_sync before BKE_view_layer_active_base_get.
Diffstat (limited to 'source')
29 files changed, 73 insertions, 19 deletions
diff --git a/source/blender/blenkernel/intern/object.cc b/source/blender/blenkernel/intern/object.cc index 5336e79ce93..1b66bce94ee 100644 --- a/source/blender/blenkernel/intern/object.cc +++ b/source/blender/blenkernel/intern/object.cc @@ -2596,6 +2596,7 @@ Object **BKE_object_pose_array_get(const Scene *scene, Base **BKE_object_pose_base_array_get_ex( const Scene *scene, ViewLayer *view_layer, View3D *v3d, uint *r_bases_len, bool unique) { + BKE_view_layer_ensure_sync(scene, view_layer); Base *base_active = BKE_view_layer_active_base_get(view_layer, __func__); Object *ob_pose = base_active ? BKE_object_pose_armature_get(base_active->object) : nullptr; Base *base_pose = nullptr; diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c index 866961066ef..1bc774a0922 100644 --- a/source/blender/draw/intern/draw_common.c +++ b/source/blender/draw/intern/draw_common.c @@ -280,6 +280,7 @@ int DRW_object_wire_theme_get(Object *ob, ViewLayer *view_layer, float **r_color { const DRWContextState *draw_ctx = DRW_context_state_get(); const bool is_edit = (draw_ctx->object_mode & OB_MODE_EDIT) && (ob->mode & OB_MODE_EDIT); + BKE_view_layer_ensure_sync(draw_ctx->scene, view_layer); const Base *base = BKE_view_layer_active_base_get(view_layer, __func__); const bool active = base && ((ob->base_flag & BASE_FROM_DUPLI) ? (DRW_object_get_dupli_parent(ob) == base->object) : diff --git a/source/blender/editors/armature/armature_select.c b/source/blender/editors/armature/armature_select.c index e87cd5e556e..3a8fa1051f7 100644 --- a/source/blender/editors/armature/armature_select.c +++ b/source/blender/editors/armature/armature_select.c @@ -1103,6 +1103,7 @@ bool ED_armature_edit_select_pick_bone(bContext *C, arm->act_edbone = ebone; } + BKE_view_layer_ensure_sync(scene, view_layer); if (BKE_view_layer_active_base_get(view_layer, __func__) != basact) { ED_object_base_activate(C, basact); } diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index 3e94181224e..86524f4243e 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -4961,6 +4961,7 @@ bool ED_curve_editnurb_select_pick(bContext *C, WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, NULL); } + BKE_view_layer_ensure_sync(vc.scene, vc.view_layer); if (BKE_view_layer_active_base_get(vc.view_layer, __func__) != basact) { ED_object_base_activate(C, basact); } diff --git a/source/blender/editors/curve/editcurve_select.c b/source/blender/editors/curve/editcurve_select.c index 67bbbcaaa9d..d399314f2db 100644 --- a/source/blender/editors/curve/editcurve_select.c +++ b/source/blender/editors/curve/editcurve_select.c @@ -2050,6 +2050,7 @@ static int edcu_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmE BKE_curve_nurb_vert_active_set(cu, nu_dst, vert_dst_p); + BKE_view_layer_ensure_sync(vc.scene, vc.view_layer); if (BKE_view_layer_active_base_get(vc.view_layer, __func__) != basact) { ED_object_base_activate(C, basact); } diff --git a/source/blender/editors/lattice/editlattice_select.c b/source/blender/editors/lattice/editlattice_select.c index 11011a3c037..7aefb17e064 100644 --- a/source/blender/editors/lattice/editlattice_select.c +++ b/source/blender/editors/lattice/editlattice_select.c @@ -685,6 +685,7 @@ bool ED_lattice_select_pick(bContext *C, const int mval[2], const struct SelectP lt->actbp = LT_ACTBP_NONE; } + BKE_view_layer_ensure_sync(vc.scene, vc.view_layer); if (BKE_view_layer_active_base_get(vc.view_layer, __func__) != basact) { ED_object_base_activate(C, basact); } diff --git a/source/blender/editors/mesh/editmesh_path.c b/source/blender/editors/mesh/editmesh_path.c index 7dfad090609..0424818504c 100644 --- a/source/blender/editors/mesh/editmesh_path.c +++ b/source/blender/editors/mesh/editmesh_path.c @@ -679,6 +679,7 @@ static int edbm_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmE em_setup_viewcontext(C, &vc); copy_v2_v2_int(vc.mval, event->mval); + BKE_view_layer_ensure_sync(vc.scene, vc.view_layer); Base *basact = BKE_view_layer_active_base_get(vc.view_layer, __func__); BMEditMesh *em = vc.em; @@ -733,6 +734,7 @@ static int edbm_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmE return OPERATOR_PASS_THROUGH; } + BKE_view_layer_ensure_sync(vc.scene, vc.view_layer); if (BKE_view_layer_active_base_get(vc.view_layer, __func__) != basact) { ED_object_base_activate(C, basact); } diff --git a/source/blender/editors/mesh/editmesh_polybuild.c b/source/blender/editors/mesh/editmesh_polybuild.c index c4025624f48..95de13f32b6 100644 --- a/source/blender/editors/mesh/editmesh_polybuild.c +++ b/source/blender/editors/mesh/editmesh_polybuild.c @@ -87,7 +87,9 @@ static bool edbm_preselect_or_active(bContext *C, const View3D *v3d, Base **r_ba ED_view3d_gizmo_mesh_preselect_get_active(C, gz, r_base, r_ele); } else { + const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); Base *base = BKE_view_layer_active_base_get(view_layer, __func__); Object *obedit = base->object; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -150,6 +152,7 @@ static int edbm_polybuild_transform_at_cursor_invoke(bContext *C, .is_destructive = true, }); if (basact != NULL) { + BKE_view_layer_ensure_sync(vc.scene, vc.view_layer); if (BKE_view_layer_active_base_get(vc.view_layer, __func__) != basact) { ED_object_base_activate(C, basact); } @@ -237,6 +240,7 @@ static int edbm_polybuild_delete_at_cursor_invoke(bContext *C, .is_destructive = true, }); if (basact != NULL) { + BKE_view_layer_ensure_sync(vc.scene, vc.view_layer); if (BKE_view_layer_active_base_get(vc.view_layer, __func__) != basact) { ED_object_base_activate(C, basact); } @@ -405,6 +409,7 @@ static int edbm_polybuild_face_at_cursor_invoke(bContext *C, wmOperator *op, con }); if (basact != NULL) { + BKE_view_layer_ensure_sync(vc.scene, vc.view_layer); if (BKE_view_layer_active_base_get(vc.view_layer, __func__) != basact) { ED_object_base_activate(C, basact); } @@ -498,6 +503,7 @@ static int edbm_polybuild_split_at_cursor_invoke(bContext *C, WM_event_add_mousemove(vc.win); + BKE_view_layer_ensure_sync(vc.scene, vc.view_layer); if (BKE_view_layer_active_base_get(vc.view_layer, __func__) != basact) { ED_object_base_activate(C, basact); } @@ -590,6 +596,7 @@ static int edbm_polybuild_dissolve_at_cursor_invoke(bContext *C, .is_destructive = true, }); + BKE_view_layer_ensure_sync(vc.scene, vc.view_layer); if (BKE_view_layer_active_base_get(vc.view_layer, __func__) != basact) { ED_object_base_activate(C, basact); } diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index b55080b010b..c88db573509 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -2219,6 +2219,7 @@ bool EDBM_select_pick(bContext *C, const int mval[2], const struct SelectPick_Pa /* Changing active object is handy since it allows us to * switch UV layers, vgroups for eg. */ + BKE_view_layer_ensure_sync(vc.scene, vc.view_layer); if (BKE_view_layer_active_base_get(vc.view_layer, __func__) != basact) { ED_object_base_activate(C, basact); } diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c index 0429768efce..302b61584d1 100644 --- a/source/blender/editors/metaball/mball_edit.c +++ b/source/blender/editors/metaball/mball_edit.c @@ -464,7 +464,7 @@ static int select_random_metaelems_exec(bContext *C, wmOperator *op) const float randfac = RNA_float_get(op->ptr, "ratio"); const int seed = WM_operator_properties_select_random_seed_increment_get(op); -Scene *scene = CTX_data_scene(C); + Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data( @@ -905,7 +905,7 @@ bool ED_mball_select_pick(bContext *C, const int mval[2], const struct SelectPic break; } } - + const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); MetaBall *mb = (MetaBall *)base->object->data; mb->lastelem = ml; @@ -913,6 +913,7 @@ bool ED_mball_select_pick(bContext *C, const int mval[2], const struct SelectPic DEG_id_tag_update(&mb->id, ID_RECALC_SELECT); WM_event_add_notifier(C, NC_GEOM | ND_SELECT, mb); + BKE_view_layer_ensure_sync(scene, view_layer); if (BKE_view_layer_active_base_get(view_layer, __func__) != base) { ED_object_base_activate(C, base); } diff --git a/source/blender/editors/object/object_add.cc b/source/blender/editors/object/object_add.cc index 511ce6dfc13..1dded0fe170 100644 --- a/source/blender/editors/object/object_add.cc +++ b/source/blender/editors/object/object_add.cc @@ -3690,6 +3690,7 @@ static int duplicate_exec(bContext *C, wmOperator *op) ED_object_base_select(base, BA_DESELECT); /* new object will become active */ + BKE_view_layer_ensure_sync(scene, view_layer); if (BKE_view_layer_active_base_get(view_layer, __func__) == base) { ob_new_active = ob_new; } diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index 0798c4dd950..8f2aa41b7ce 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -2316,6 +2316,7 @@ static bool get_new_constraint_target( 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); Base *base = BKE_view_layer_active_base_get(view_layer, __func__); Object *obt; diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c index 4f76ed60e15..908e3a3ccf7 100644 --- a/source/blender/editors/object/object_hook.c +++ b/source/blender/editors/object/object_hook.c @@ -490,6 +490,7 @@ static Object *add_hook_object_new( Base *basedit; Object *ob; ob = BKE_object_add(bmain, scene, view_layer, OB_EMPTY, NULL); + BKE_view_layer_ensure_sync(scene, view_layer); Base *basact = BKE_view_layer_active_base_get(view_layer, __func__); BLI_assert(basact->object == ob); if (v3d && v3d->localvd) { diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index a232670a7d2..6aae4aa711d 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -218,9 +218,8 @@ Base *ED_object_find_first_by_data_id(const Scene *scene, ViewLayer *view_layer, { BLI_assert(OB_DATA_SUPPORT_ID(GS(id->name))); - BKE_view_layer_ensure_sync(scene, view_layer); - /* Try active object. */ + BKE_view_layer_ensure_sync(scene, view_layer); Base *basact = BKE_view_layer_active_base_get(view_layer, __func__); if (basact && basact->object && basact->object->data == id) { @@ -254,6 +253,7 @@ bool ED_object_jump_to_object(bContext *C, Object *ob, const bool UNUSED(reveal_ Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); View3D *v3d = CTX_wm_view3d(C); + BKE_view_layer_ensure_sync(scene, view_layer); Base *base = BKE_view_layer_base_find(view_layer, ob); if (base == NULL) { diff --git a/source/blender/editors/space_outliner/outliner_collections.cc b/source/blender/editors/space_outliner/outliner_collections.cc index aacfdc3c47b..970b12f7d39 100644 --- a/source/blender/editors/space_outliner/outliner_collections.cc +++ b/source/blender/editors/space_outliner/outliner_collections.cc @@ -413,6 +413,7 @@ static int collection_hierarchy_delete_exec(bContext *C, wmOperator *op) Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); struct wmMsgBus *mbus = CTX_wm_message_bus(C); + BKE_view_layer_ensure_sync(scene, view_layer); const Base *basact_prev = BKE_view_layer_active_base_get(view_layer, __func__); outliner_collection_delete(C, bmain, scene, op->reports, true); @@ -422,6 +423,7 @@ static int collection_hierarchy_delete_exec(bContext *C, wmOperator *op) WM_main_add_notifier(NC_SCENE | ND_LAYER, nullptr); + BKE_view_layer_ensure_sync(scene, view_layer); if (basact_prev != BKE_view_layer_active_base_get(view_layer, __func__)) { WM_msg_publish_rna_prop(mbus, &scene->id, view_layer, LayerObjects, active); } diff --git a/source/blender/editors/space_outliner/outliner_tools.cc b/source/blender/editors/space_outliner/outliner_tools.cc index c0843b55ab6..1a5bd1787a3 100644 --- a/source/blender/editors/space_outliner/outliner_tools.cc +++ b/source/blender/editors/space_outliner/outliner_tools.cc @@ -2392,6 +2392,7 @@ static int outliner_delete_exec(bContext *C, wmOperator *op) SpaceOutliner *space_outliner = CTX_wm_space_outliner(C); struct wmMsgBus *mbus = CTX_wm_message_bus(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); const Base *basact_prev = BKE_view_layer_active_base_get(view_layer, __func__); const bool delete_hierarchy = RNA_boolean_get(op->ptr, "hierarchy"); @@ -2436,6 +2437,7 @@ static int outliner_delete_exec(bContext *C, wmOperator *op) DEG_id_tag_update(&scene->id, ID_RECALC_COPY_ON_WRITE); DEG_relations_tag_update(bmain); + BKE_view_layer_ensure_sync(scene, view_layer); if (basact_prev != BKE_view_layer_active_base_get(view_layer, __func__)) { WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene); WM_msg_publish_rna_prop(mbus, &scene->id, view_layer, LayerObjects, active); diff --git a/source/blender/editors/space_outliner/outliner_tree.cc b/source/blender/editors/space_outliner/outliner_tree.cc index 9681637f11f..7d421f075fb 100644 --- a/source/blender/editors/space_outliner/outliner_tree.cc +++ b/source/blender/editors/space_outliner/outliner_tree.cc @@ -1395,7 +1395,8 @@ static int outliner_exclude_filter_get(const SpaceOutliner *space_outliner) return exclude_filter; } -static bool outliner_element_visible_get(ViewLayer *view_layer, +static bool outliner_element_visible_get(const Scene *scene, + ViewLayer *view_layer, TreeElement *te, const int exclude_filter) { @@ -1475,6 +1476,7 @@ static bool outliner_element_visible_get(ViewLayer *view_layer, } else { BLI_assert(exclude_filter & SO_FILTER_OB_STATE_ACTIVE); + BKE_view_layer_ensure_sync(scene, view_layer); if (base != BKE_view_layer_active_base_get(view_layer, __func__)) { is_visible = false; } @@ -1557,6 +1559,7 @@ static TreeElement *outliner_extract_children_from_subtree(TreeElement *element, } static int outliner_filter_subtree(SpaceOutliner *space_outliner, + const Scene *scene, ViewLayer *view_layer, ListBase *lb, const char *search_string, @@ -1567,18 +1570,18 @@ static int outliner_filter_subtree(SpaceOutliner *space_outliner, for (te = static_cast<TreeElement *>(lb->first); te; te = te_next) { te_next = te->next; - if ((outliner_element_visible_get(view_layer, te, exclude_filter) == false)) { + if ((outliner_element_visible_get(scene, view_layer, te, exclude_filter) == false)) { /* Don't free the tree, but extract the children from the parent and add to this tree. */ /* This also needs filtering the subtree prior (see T69246). */ outliner_filter_subtree( - space_outliner, view_layer, &te->subtree, search_string, exclude_filter); + space_outliner, scene, view_layer, &te->subtree, search_string, exclude_filter); te_next = outliner_extract_children_from_subtree(te, lb); continue; } if ((exclude_filter & SO_FILTER_SEARCH) == 0) { /* Filter subtree too. */ outliner_filter_subtree( - space_outliner, view_layer, &te->subtree, search_string, exclude_filter); + space_outliner, scene, view_layer, &te->subtree, search_string, exclude_filter); continue; } @@ -1596,7 +1599,8 @@ static int outliner_filter_subtree(SpaceOutliner *space_outliner, if ((!TSELEM_OPEN(tselem, space_outliner)) || outliner_filter_subtree( - space_outliner, view_layer, &te->subtree, search_string, exclude_filter) == 0) { + space_outliner, scene, view_layer, &te->subtree, search_string, exclude_filter) == + 0) { outliner_free_tree_element(te, lb); } } @@ -1608,7 +1612,7 @@ static int outliner_filter_subtree(SpaceOutliner *space_outliner, /* filter subtree too */ outliner_filter_subtree( - space_outliner, view_layer, &te->subtree, search_string, exclude_filter); + space_outliner, scene, view_layer, &te->subtree, search_string, exclude_filter); } } @@ -1616,7 +1620,9 @@ static int outliner_filter_subtree(SpaceOutliner *space_outliner, return (BLI_listbase_is_empty(lb) == false); } -static void outliner_filter_tree(SpaceOutliner *space_outliner, ViewLayer *view_layer) +static void outliner_filter_tree(SpaceOutliner *space_outliner, + const Scene *scene, + ViewLayer *view_layer) { char search_buff[sizeof(((struct SpaceOutliner *)nullptr)->search_string) + 2]; char *search_string; @@ -1637,7 +1643,7 @@ static void outliner_filter_tree(SpaceOutliner *space_outliner, ViewLayer *view_ } outliner_filter_subtree( - space_outliner, view_layer, &space_outliner->tree, search_string, exclude_filter); + space_outliner, scene, view_layer, &space_outliner->tree, search_string, exclude_filter); } static void outliner_clear_newid_from_main(Main *bmain) @@ -1714,7 +1720,7 @@ void outliner_build_tree(Main *mainvar, outliner_collections_children_sort(&space_outliner->tree); } - outliner_filter_tree(space_outliner, view_layer); + outliner_filter_tree(space_outliner, scene, view_layer); outliner_restore_scrolling_position(space_outliner, region, &focus); /* `ID.newid` pointer is abused when building tree, DO NOT call #BKE_main_id_newptr_and_tag_clear diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 8f3e166391b..cd98d256509 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -1891,7 +1891,9 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes * without showing the object. * * See T85532 for alternatives that were considered. */ + const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); Base *base = BKE_view_layer_active_base_get(view_layer, __func__); if (base) { Object *ob = base->object; diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index f5e41676bc3..3c4fad39699 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -1718,7 +1718,9 @@ static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event static bool view3d_panel_transform_poll(const bContext *C, PanelType *UNUSED(pt)) { + const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); return (BKE_view_layer_active_base_get(view_layer, __func__) != NULL); } diff --git a/source/blender/editors/space_view3d/view3d_gizmo_armature.c b/source/blender/editors/space_view3d/view3d_gizmo_armature.c index dc8d3c49ef9..4f5d5d5a492 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_armature.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_armature.c @@ -113,7 +113,9 @@ static bool WIDGETGROUP_armature_spline_poll(const bContext *C, wmGizmoGroupType return false; } + const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); Base *base = BKE_view_layer_active_base_get(view_layer, __func__); if (base && BASE_SELECTABLE(v3d, base)) { Object *ob = BKE_object_pose_armature_get(base->object); diff --git a/source/blender/editors/space_view3d/view3d_gizmo_camera.c b/source/blender/editors/space_view3d/view3d_gizmo_camera.c index e8cbd9ff372..00e183a49d2 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_camera.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_camera.c @@ -55,7 +55,9 @@ static bool WIDGETGROUP_camera_poll(const bContext *C, wmGizmoGroupType *UNUSED( return false; } + const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); Base *base = BKE_view_layer_active_base_get(view_layer, __func__); if (base && BASE_SELECTABLE(v3d, base)) { Object *ob = base->object; diff --git a/source/blender/editors/space_view3d/view3d_gizmo_empty.c b/source/blender/editors/space_view3d/view3d_gizmo_empty.c index 37bbaf4b7db..88682110c5c 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_empty.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_empty.c @@ -99,7 +99,9 @@ static bool WIDGETGROUP_empty_image_poll(const bContext *C, wmGizmoGroupType *UN return false; } + const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); Base *base = BKE_view_layer_active_base_get(view_layer, __func__); if (base && BASE_SELECTABLE(v3d, base)) { Object *ob = base->object; diff --git a/source/blender/editors/space_view3d/view3d_gizmo_forcefield.c b/source/blender/editors/space_view3d/view3d_gizmo_forcefield.c index f86657c0647..9be52a8045d 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_forcefield.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_forcefield.c @@ -42,7 +42,9 @@ static bool WIDGETGROUP_forcefield_poll(const bContext *C, wmGizmoGroupType *UNU return false; } + const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); Base *base = BKE_view_layer_active_base_get(view_layer, __func__); if (base && BASE_SELECTABLE(v3d, base)) { Object *ob = base->object; diff --git a/source/blender/editors/space_view3d/view3d_gizmo_light.c b/source/blender/editors/space_view3d/view3d_gizmo_light.c index d378a5edb1b..00b06ccac91 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_light.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_light.c @@ -45,7 +45,9 @@ static bool WIDGETGROUP_light_spot_poll(const bContext *C, wmGizmoGroupType *UNU return false; } + const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); Base *base = BKE_view_layer_active_base_get(view_layer, __func__); if (base && BASE_SELECTABLE(v3d, base)) { Object *ob = base->object; @@ -158,7 +160,9 @@ static bool WIDGETGROUP_light_area_poll(const bContext *C, wmGizmoGroupType *UNU return false; } + const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); Base *base = BKE_view_layer_active_base_get(view_layer, __func__); if (base && BASE_SELECTABLE(v3d, base)) { Object *ob = base->object; @@ -243,7 +247,9 @@ static bool WIDGETGROUP_light_target_poll(const bContext *C, wmGizmoGroupType *U return false; } + const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); Base *base = BKE_view_layer_active_base_get(view_layer, __func__); if (base && BASE_SELECTABLE(v3d, base)) { Object *ob = base->object; diff --git a/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c b/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c index 9f98ea4d142..524e4e119bb 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c @@ -128,6 +128,7 @@ static int gizmo_preselect_elem_test_select(bContext *C, wmGizmo *gz, const int Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); View3D *v3d = CTX_wm_view3d(C); + BKE_view_layer_ensure_sync(scene, view_layer); if (((gz_ele->bases)) == NULL || (gz_ele->bases[0] != BKE_view_layer_active_base_get(view_layer, __func__))) { MEM_SAFE_FREE(gz_ele->bases); @@ -356,6 +357,7 @@ static int gizmo_preselect_edgering_test_select(bContext *C, wmGizmo *gz, const Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); View3D *v3d = CTX_wm_view3d(C); + BKE_view_layer_ensure_sync(scene, view_layer); if (((gz_ring->bases)) == NULL || (gz_ring->bases[0] != BKE_view_layer_active_base_get(view_layer, __func__))) { MEM_SAFE_FREE(gz_ring->bases); diff --git a/source/blender/editors/space_view3d/view3d_select.cc b/source/blender/editors/space_view3d/view3d_select.cc index 13a6f834948..e6bea3868f5 100644 --- a/source/blender/editors/space_view3d/view3d_select.cc +++ b/source/blender/editors/space_view3d/view3d_select.cc @@ -1462,6 +1462,7 @@ static int object_select_menu_exec(bContext *C, wmOperator *op) View3D *v3d = CTX_wm_view3d(C); Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); const Base *oldbasact = BKE_view_layer_active_base_get(view_layer, __func__); Base *basact = nullptr; @@ -1658,6 +1659,7 @@ static int bone_select_menu_exec(bContext *C, wmOperator *op) View3D *v3d = CTX_wm_view3d(C); Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + BKE_view_layer_ensure_sync(scene, view_layer); const Base *oldbasact = BKE_view_layer_active_base_get(view_layer, __func__); Base *basact = object_mouse_select_menu_data[name_index].base_ptr; @@ -2167,6 +2169,7 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, /* It's possible there are no hits (all objects contained bones). */ if (hits > 0) { /* Only exclude active object when it is selected. */ + BKE_view_layer_ensure_sync(scene, view_layer); Base *base = BKE_view_layer_active_base_get(view_layer, __func__); if (base && (base->flag & BASE_SELECTED)) { const int select_id_active = base->object->runtime.select_id; @@ -3449,7 +3452,8 @@ static bool do_mesh_box_select(ViewContext *vc, } if (ts->selectmode & SCE_SELECT_EDGE) { /* Does both use_zbuf and non-use_zbuf versions (need screen cos for both) */ - struct BoxSelectUserData_ForMeshEdge cb_data {}; + struct BoxSelectUserData_ForMeshEdge cb_data { + }; cb_data.data = &data; cb_data.esel = use_zbuf ? esel : nullptr; cb_data.backbuf_offset = use_zbuf ? DRW_select_buffer_context_offset_for_object_elem( diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 19fedcbc798..9b58f412eb1 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -1085,8 +1085,8 @@ bool calculateCenterActive(TransInfo *t, bool select_only, float r_center[3]) } else { /* object mode */ - ViewLayer *view_layer = t->view_layer; - Base *base = BKE_view_layer_active_base_get(view_layer, __func__); + BKE_view_layer_ensure_sync(t->scene, t->view_layer); + Base *base = BKE_view_layer_active_base_get(t->view_layer, __func__); if (base && ((!select_only) || ((base->flag & BASE_SELECTED) != 0))) { copy_v3_v3(r_center, base->object->obmat[3]); return true; diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index dc50c8b733c..3c151285a83 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -722,8 +722,8 @@ static eSnapMode snap_mode_from_spacetype(TransInfo *t) static eSnapTargetSelect snap_target_select_from_spacetype(TransInfo *t) { - ViewLayer *view_layer = t->view_layer; - Base *base_act = BKE_view_layer_active_base_get(view_layer, __func__); + BKE_view_layer_ensure_sync(t->scene, t->view_layer); + Base *base_act = BKE_view_layer_active_base_get(t->view_layer, __func__); eSnapTargetSelect ret = SCE_SNAP_TARGET_ALL; diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c index ec6e1a2e2a5..cb2cb5bb398 100644 --- a/source/blender/editors/util/ed_util.c +++ b/source/blender/editors/util/ed_util.c @@ -60,7 +60,7 @@ void ED_editors_init_for_undo(Main *bmain) { wmWindowManager *wm = bmain->wm.first; LISTBASE_FOREACH (wmWindow *, win, &wm->windows) { - const Scene *scene = WM_window_get_active_scene(win); + Scene *scene = WM_window_get_active_scene(win); ViewLayer *view_layer = WM_window_get_active_view_layer(win); BKE_view_layer_ensure_sync(scene, view_layer); Object *ob = BKE_view_layer_active_object_get(view_layer); |