From 345c6298e995ea618c34282ba6d7ab5af032f191 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 8 Feb 2018 21:14:26 +1100 Subject: Object Mode: move to workspace struct - Read-only access can often use EvaluationContext.object_mode - Write access to go to WorkSpace.object_mode. - Some TODO's remain (marked as "TODO/OBMODE") - Add-ons will need updating (context.active_object.mode -> context.workspace.object_mode) - There will be small/medium issues that still need resolving this does work on a basic level though. See D3037 --- source/blender/editors/object/object_bake.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'source/blender/editors/object/object_bake.c') diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index 3efb6253f6f..cf00e657fbf 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -206,7 +206,8 @@ static bool multiresbake_check(bContext *C, wmOperator *op) return ok; } -static DerivedMesh *multiresbake_create_loresdm(Scene *scene, Object *ob, int *lvl) +static DerivedMesh *multiresbake_create_loresdm( + Scene *scene, Object *ob, eObjectMode object_mode, int *lvl) { DerivedMesh *dm; MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0); @@ -226,13 +227,15 @@ static DerivedMesh *multiresbake_create_loresdm(Scene *scene, Object *ob, int *l tmp_mmd.lvl = *lvl; tmp_mmd.sculptlvl = *lvl; - dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob, 0); + dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob, 0, object_mode); cddm->release(cddm); return dm; } -static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *lvl, bool *simple) +static DerivedMesh *multiresbake_create_hiresdm( + Scene *scene, Object *ob, eObjectMode object_mode, + int *lvl, bool *simple) { Mesh *me = (Mesh *)ob->data; MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0); @@ -253,7 +256,7 @@ static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *l tmp_mmd.lvl = mmd->totlvl; tmp_mmd.sculptlvl = mmd->totlvl; - dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob, 0); + dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob, 0, object_mode); cddm->release(cddm); return dm; @@ -323,6 +326,9 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) if (!multiresbake_check(C, op)) return OPERATOR_CANCELLED; + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); + if (scene->r.bake_flag & R_BAKE_CLEAR) { /* clear images */ CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { @@ -371,8 +377,8 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) bkr.ob_image.array = BKE_object_material_edit_image_get_array(ob); bkr.ob_image.len = ob->totcol; - bkr.hires_dm = multiresbake_create_hiresdm(scene, ob, &bkr.tot_lvl, &bkr.simple); - bkr.lores_dm = multiresbake_create_loresdm(scene, ob, &bkr.lvl); + bkr.hires_dm = multiresbake_create_hiresdm(scene, ob, eval_ctx.object_mode, &bkr.tot_lvl, &bkr.simple); + bkr.lores_dm = multiresbake_create_loresdm(scene, ob, eval_ctx.object_mode, &bkr.lvl); RE_multires_bake_images(&bkr); @@ -399,6 +405,9 @@ static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj) Scene *scene = CTX_data_scene(C); Object *ob; + EvaluationContext eval_ctx; + CTX_data_eval_ctx(C, &eval_ctx); + /* backup scene settings, so their changing in UI would take no effect on baker */ bkj->bake_filter = scene->r.bake_filter; bkj->mode = scene->r.bake_mode; @@ -427,8 +436,8 @@ static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj) data->ob_image.len = ob->totcol; /* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */ - data->hires_dm = multiresbake_create_hiresdm(scene, ob, &data->tot_lvl, &data->simple); - data->lores_dm = multiresbake_create_loresdm(scene, ob, &lvl); + data->hires_dm = multiresbake_create_hiresdm(scene, ob, eval_ctx.object_mode, &data->tot_lvl, &data->simple); + data->lores_dm = multiresbake_create_loresdm(scene, ob, eval_ctx.object_mode, &lvl); data->lvl = lvl; BLI_addtail(&bkj->data, data); -- cgit v1.2.3