diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2022-09-06 21:38:35 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2022-09-06 21:38:35 +0300 |
commit | c9ff7f77a8711a2968e98ca33e73972430f0e289 (patch) | |
tree | daa076b134fa49017a0b530bd270400c62b826e5 /source/blender/editors/space_view3d | |
parent | 5dea15df6de05e2901574b152140daee60d7d466 (diff) |
Invoke ensure_sync for object_bases_get.
Diffstat (limited to 'source/blender/editors/space_view3d')
4 files changed, 38 insertions, 19 deletions
diff --git a/source/blender/editors/space_view3d/view3d_navigate.c b/source/blender/editors/space_view3d/view3d_navigate.c index 91af41dacc6..5d0119eae9d 100644 --- a/source/blender/editors/space_view3d/view3d_navigate.c +++ b/source/blender/editors/space_view3d/view3d_navigate.c @@ -164,6 +164,7 @@ bool view3d_orbit_calc_center(bContext *C, float r_dyn_ofs[3]) const Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); Scene *scene = CTX_data_scene(C); + Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); ViewLayer *view_layer_eval = DEG_get_evaluated_view_layer(depsgraph); View3D *v3d = CTX_wm_view3d(C); Object *ob_act_eval = BKE_view_layer_active_object_get(view_layer_eval); @@ -207,6 +208,7 @@ bool view3d_orbit_calc_center(bContext *C, float r_dyn_ofs[3]) float select_center[3]; zero_v3(select_center); + BKE_view_layer_ensure_sync(scene_eval, view_layer_eval); LISTBASE_FOREACH ( Base *, base_eval, BKE_view_layer_object_bases_get(view_layer_eval, __func__)) { if (BASE_SELECTED(v3d, base_eval)) { @@ -752,6 +754,7 @@ static int view3d_all_exec(bContext *C, wmOperator *op) RegionView3D *rv3d = CTX_wm_region_view3d(C); Scene *scene = CTX_data_scene(C); Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); + Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); ViewLayer *view_layer_eval = DEG_get_evaluated_view_layer(depsgraph); const bool use_all_regions = RNA_boolean_get(op->ptr, "use_all_regions"); @@ -778,6 +781,7 @@ static int view3d_all_exec(bContext *C, wmOperator *op) INIT_MINMAX(min, max); } + BKE_view_layer_ensure_sync(scene_eval, view_layer_eval); LISTBASE_FOREACH ( Base *, base_eval, BKE_view_layer_object_bases_get(view_layer_eval, __func__)) { if (BASE_VISIBLE(v3d, base_eval)) { @@ -863,6 +867,7 @@ static int viewselected_exec(bContext *C, wmOperator *op) RegionView3D *rv3d = CTX_wm_region_view3d(C); Scene *scene = CTX_data_scene(C); Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); + Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); ViewLayer *view_layer_eval = DEG_get_evaluated_view_layer(depsgraph); Object *ob_eval = BKE_view_layer_active_object_get(view_layer_eval); Object *obedit = CTX_data_edit_object(C); @@ -887,6 +892,7 @@ static int viewselected_exec(bContext *C, wmOperator *op) /* hard-coded exception, we look for the one selected armature */ /* this is weak code this way, we should make a generic * active/selection callback interface once... */ + BKE_view_layer_ensure_sync(scene_eval, view_layer_eval); Base *base_eval; for (base_eval = BKE_view_layer_object_bases_get(view_layer_eval, __func__)->first; base_eval; base_eval = base_eval->next) { @@ -966,6 +972,7 @@ static int viewselected_exec(bContext *C, wmOperator *op) ok_dist = 0; /* don't zoom */ } else { + BKE_view_layer_ensure_sync(scene_eval, view_layer_eval); LISTBASE_FOREACH ( Base *, base_eval, BKE_view_layer_object_bases_get(view_layer_eval, __func__)) { if (BASE_SELECTED(v3d, base_eval)) { diff --git a/source/blender/editors/space_view3d/view3d_select.cc b/source/blender/editors/space_view3d/view3d_select.cc index 4def2355d93..e443019b907 100644 --- a/source/blender/editors/space_view3d/view3d_select.cc +++ b/source/blender/editors/space_view3d/view3d_select.cc @@ -140,9 +140,10 @@ void ED_view3d_viewcontext_init_object(ViewContext *vc, Object *obact) /** \name Internal Object Utilities * \{ */ -static bool object_deselect_all_visible(ViewLayer *view_layer, View3D *v3d) +static bool object_deselect_all_visible(const Scene *scene, ViewLayer *view_layer, View3D *v3d) { bool changed = false; + BKE_view_layer_ensure_sync(scene, view_layer); LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) { if (base->flag & BASE_SELECTED) { if (BASE_SELECTABLE(v3d, base)) { @@ -155,9 +156,10 @@ static bool object_deselect_all_visible(ViewLayer *view_layer, View3D *v3d) } /* deselect all except b */ -static bool object_deselect_all_except(ViewLayer *view_layer, Base *b) +static bool object_deselect_all_except(const Scene *scene, ViewLayer *view_layer, Base *b) { bool changed = false; + BKE_view_layer_ensure_sync(scene, view_layer); LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) { if (base->flag & BASE_SELECTED) { if (b != base) { @@ -562,9 +564,9 @@ static bool do_lasso_select_objects(ViewContext *vc, bool changed = false; if (SEL_OP_USE_PRE_DESELECT(sel_op)) { - changed |= object_deselect_all_visible(vc->view_layer, vc->v3d); + changed |= object_deselect_all_visible(vc->scene, vc->view_layer, vc->v3d); } - + BKE_view_layer_ensure_sync(vc->scene, vc->view_layer); LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(vc->view_layer, __func__)) { if (BASE_SELECTABLE(v3d, base)) { /* Use this to avoid unnecessary lasso look-ups. */ const bool is_select = base->flag & BASE_SELECTED; @@ -1458,6 +1460,7 @@ static int object_select_menu_exec(bContext *C, wmOperator *op) const char *name = object_mouse_select_menu_data[name_index].idname; View3D *v3d = CTX_wm_view3d(C); + Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); const Base *oldbasact = BKE_view_layer_active_base_get(view_layer, __func__); @@ -1499,7 +1502,7 @@ static int object_select_menu_exec(bContext *C, wmOperator *op) } } else { - object_deselect_all_except(view_layer, basact); + object_deselect_all_except(scene, view_layer, basact); ED_object_base_select(basact, BA_SELECT); changed = true; } @@ -2100,6 +2103,7 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, bool do_bones_get_priotity, int *r_select_id_subelem) { + Scene *scene = vc->scene; ViewLayer *view_layer = vc->view_layer; View3D *v3d = vc->v3d; int a; @@ -2192,6 +2196,7 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, Base *basact = nullptr; if (found) { + BKE_view_layer_ensure_sync(scene, view_layer); LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) { if (has_bones ? BASE_VISIBLE(v3d, base) : BASE_SELECTABLE(v3d, base)) { if (base->object->runtime.select_id == select_id) { @@ -2212,9 +2217,11 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, static Base *mouse_select_object_center(ViewContext *vc, Base *startbase, const int mval[2]) { ARegion *region = vc->region; + Scene *scene = vc->scene; ViewLayer *view_layer = vc->view_layer; View3D *v3d = vc->v3d; + BKE_view_layer_ensure_sync(scene, view_layer); Base *oldbasact = BKE_view_layer_active_base_get(view_layer, __func__); const float mval_fl[2] = {(float)mval[0], (float)mval[1]}; @@ -2529,6 +2536,7 @@ static bool ed_object_select_pick(bContext *C, /* No menu, continue with selection. */ ViewLayer *view_layer = vc.view_layer; + BKE_view_layer_ensure_sync(scene, view_layer); /* Don't set when the context has no active object (hidden), see: T60807. */ const Base *oldbasact = vc.obact ? BKE_view_layer_active_base_get(view_layer, __func__) : nullptr; @@ -2720,7 +2728,7 @@ static bool ed_object_select_pick(bContext *C, else if (found || params->deselect_all) { /* Deselect everything. */ /* `basact` may be nullptr. */ - if (object_deselect_all_except(view_layer, basact)) { + if (object_deselect_all_except(scene, view_layer, basact)) { changed_object = true; } } @@ -2732,7 +2740,7 @@ static bool ed_object_select_pick(bContext *C, if (vc.obedit) { /* Only do the select (use for setting vertex parents & hooks). * In edit-mode do not activate. */ - object_deselect_all_except(view_layer, basact); + object_deselect_all_except(scene, view_layer, basact); ED_object_base_select(basact, BA_SELECT); changed_object = true; @@ -2763,7 +2771,7 @@ static bool ed_object_select_pick(bContext *C, break; } case SEL_OP_SET: { - object_deselect_all_except(view_layer, basact); + object_deselect_all_except(scene, view_layer, basact); ED_object_base_select(basact, BA_SELECT); break; } @@ -3441,8 +3449,7 @@ 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( @@ -3644,7 +3651,7 @@ static bool do_object_box_select(bContext *C, ViewContext *vc, rcti *rect, const vc->obact); const int hits = view3d_opengl_select( vc, buffer, (totobj + MAXPICKELEMS), rect, VIEW3D_SELECT_ALL, select_filter); - + BKE_view_layer_ensure_sync(vc->scene, vc->view_layer); LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(vc->view_layer, __func__)) { base->object->id.tag &= ~LIB_TAG_DOIT; } @@ -3653,7 +3660,7 @@ static bool do_object_box_select(bContext *C, ViewContext *vc, rcti *rect, const bool changed = false; if (SEL_OP_USE_PRE_DESELECT(sel_op)) { - changed |= object_deselect_all_visible(vc->view_layer, vc->v3d); + changed |= object_deselect_all_visible(vc->scene, vc->view_layer, vc->v3d); } ListBase *object_bases = BKE_view_layer_object_bases_get(vc->view_layer, __func__); @@ -4606,6 +4613,7 @@ static bool object_circle_select(ViewContext *vc, float rad) { BLI_assert(ELEM(sel_op, SEL_OP_SET, SEL_OP_ADD, SEL_OP_SUB)); + Scene *scene = vc->scene; ViewLayer *view_layer = vc->view_layer; View3D *v3d = vc->v3d; @@ -4614,11 +4622,11 @@ static bool object_circle_select(ViewContext *vc, bool changed = false; if (SEL_OP_USE_PRE_DESELECT(sel_op)) { - changed |= object_deselect_all_visible(vc->view_layer, vc->v3d); + changed |= object_deselect_all_visible(vc->scene, vc->view_layer, vc->v3d); } const bool select = (sel_op != SEL_OP_SUB); const int select_flag = select ? BASE_SELECTED : 0; - + BKE_view_layer_ensure_sync(scene, view_layer); LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) { if (BASE_SELECTABLE(v3d, base) && ((base->flag & BASE_SELECTED) != select_flag)) { float screen_co[2]; diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index febcf5f513a..a5ecef69ff8 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -203,7 +203,7 @@ static int snap_sel_to_grid_exec(bContext *C, wmOperator *UNUSED(op)) 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, objects_eval_len); + xcs, scene, view_layer, objects, objects_eval_len); MEM_freeN(objects); } if (use_transform_data_origin) { @@ -487,7 +487,7 @@ static bool snap_selected_to_location(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, objects_len); + xcs, scene, view_layer, objects, objects_len); } if (use_transform_data_origin) { BKE_scene_graph_evaluated_ensure(depsgraph, bmain); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index d28c2778426..352c23a37f1 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -854,6 +854,7 @@ static bool view3d_localview_init(const Depsgraph *depsgraph, else { Object *obedit = BKE_view_layer_edit_object_get(view_layer); if (obedit) { + BKE_view_layer_ensure_sync(scene, view_layer); LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) { base->local_view_bits &= ~local_view_bit; } @@ -865,6 +866,7 @@ static bool view3d_localview_init(const Depsgraph *depsgraph, FOREACH_BASE_IN_EDIT_MODE_END; } else { + BKE_view_layer_ensure_sync(scene, view_layer); LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) { if (BASE_SELECTED(v3d, base)) { BKE_object_minmax(base->object, min, max, false); @@ -956,6 +958,7 @@ static bool view3d_localview_init(const Depsgraph *depsgraph, static void view3d_localview_exit(const Depsgraph *depsgraph, wmWindowManager *wm, wmWindow *win, + const Scene *scene, ViewLayer *view_layer, ScrArea *area, const bool frame_selected, @@ -966,7 +969,7 @@ static void view3d_localview_exit(const Depsgraph *depsgraph, if (v3d->localvd == NULL) { return; } - + BKE_view_layer_ensure_sync(scene, view_layer); LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) { if (base->local_view_bits & v3d->local_view_uuid) { base->local_view_bits &= ~v3d->local_view_uuid; @@ -1040,7 +1043,8 @@ static int localview_exec(bContext *C, wmOperator *op) bool changed; if (v3d->localvd) { - view3d_localview_exit(depsgraph, wm, win, view_layer, area, frame_selected, smooth_viewtx); + view3d_localview_exit( + depsgraph, wm, win, scene, view_layer, area, frame_selected, smooth_viewtx); changed = true; } else { @@ -1101,7 +1105,7 @@ static int localview_remove_from_exec(bContext *C, wmOperator *op) Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); bool changed = false; - + BKE_view_layer_ensure_sync(scene, view_layer); LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) { if (BASE_SELECTED(v3d, base)) { base->local_view_bits &= ~v3d->local_view_uuid; |