From 1c24c04e6023f2d2a328dfcdc9f86cd381d029a3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 5 Apr 2018 18:20:27 +0200 Subject: Remove workspace object mode, reverts changes w/ 2.8 This caused too many problems syncing object modes with multiple objects/windows/workspaces, see: D3130 for details. --- source/blender/draw/DRW_engine.h | 10 ++++----- source/blender/draw/intern/draw_manager.c | 37 ++++++++++++++++++------------- source/blender/draw/intern/draw_view.c | 2 +- 3 files changed, 28 insertions(+), 21 deletions(-) (limited to 'source/blender/draw') diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h index e42b5a49d64..cf76bfdeef5 100644 --- a/source/blender/draw/DRW_engine.h +++ b/source/blender/draw/DRW_engine.h @@ -101,26 +101,26 @@ void DRW_draw_view(const struct bContext *C); void DRW_draw_render_loop_ex( struct Depsgraph *depsgraph, struct RenderEngineType *engine_type, - struct ARegion *ar, struct View3D *v3d, const eObjectMode object_mode, + struct ARegion *ar, struct View3D *v3d, const struct bContext *evil_C); void DRW_draw_render_loop( struct Depsgraph *depsgraph, - struct ARegion *ar, struct View3D *v3d, const eObjectMode object_mode); + struct ARegion *ar, struct View3D *v3d); void DRW_draw_render_loop_offscreen( struct Depsgraph *depsgraph, struct RenderEngineType *engine_type, - struct ARegion *ar, struct View3D *v3d, const eObjectMode object_mode, + struct ARegion *ar, struct View3D *v3d, const bool draw_background, struct GPUOffScreen *ofs, struct GPUViewport *viewport); void DRW_draw_select_loop( struct Depsgraph *depsgraph, - struct ARegion *ar, struct View3D *v3d, const eObjectMode object_mode, + struct ARegion *ar, struct View3D *v3d, bool use_obedit_skip, bool use_nearest, const struct rcti *rect, DRW_SelectPassFn select_pass_fn, void *select_pass_user_data); void DRW_draw_depth_loop( struct Depsgraph *depsgraph, - struct ARegion *ar, struct View3D *v3d, const eObjectMode object_mode); + struct ARegion *ar, struct View3D *v3d); /* This is here because GPUViewport needs it */ void DRW_pass_free(struct DRWPass *pass); diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 96cd096ae27..15b0c793a50 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -358,13 +358,19 @@ static void drw_state_eval_ctx_init(DRWManager *dst) draw_ctx->scene, draw_ctx->view_layer, draw_ctx->engine_type, - draw_ctx->object_mode, DST.options.is_scene_render ? DAG_EVAL_RENDER : DAG_EVAL_VIEWPORT); } /* Not a viewport variable, we could split this out. */ static void drw_context_state_init(void) { + if (DST.draw_ctx.obact) { + DST.draw_ctx.object_mode = DST.draw_ctx.obact->mode; + } + else { + DST.draw_ctx.object_mode = OB_MODE_OBJECT; + } + /* Edit object. */ if (DST.draw_ctx.object_mode & OB_MODE_EDIT) { DST.draw_ctx.object_edit = DST.draw_ctx.obact; @@ -1125,7 +1131,7 @@ void DRW_draw_view(const bContext *C) /* Reset before using it. */ drw_state_prepare_clean_for_draw(&DST); - DRW_draw_render_loop_ex(eval_ctx.depsgraph, engine_type, ar, v3d, eval_ctx.object_mode, C); + DRW_draw_render_loop_ex(eval_ctx.depsgraph, engine_type, ar, v3d, C); } /** @@ -1135,7 +1141,7 @@ void DRW_draw_view(const bContext *C) void DRW_draw_render_loop_ex( struct Depsgraph *depsgraph, RenderEngineType *engine_type, - ARegion *ar, View3D *v3d, const eObjectMode object_mode, + ARegion *ar, View3D *v3d, const bContext *evil_C) { @@ -1155,7 +1161,7 @@ void DRW_draw_render_loop_ex( .ar = ar, .rv3d = rv3d, .v3d = v3d, .scene = scene, .view_layer = view_layer, .obact = OBACT(view_layer), .engine_type = engine_type, - .depsgraph = depsgraph, .object_mode = object_mode, + .depsgraph = depsgraph, /* reuse if caller sets */ .evil_C = DST.draw_ctx.evil_C, @@ -1280,7 +1286,7 @@ void DRW_draw_render_loop_ex( void DRW_draw_render_loop( struct Depsgraph *depsgraph, - ARegion *ar, View3D *v3d, const eObjectMode object_mode) + ARegion *ar, View3D *v3d) { /* Reset before using it. */ drw_state_prepare_clean_for_draw(&DST); @@ -1288,13 +1294,13 @@ void DRW_draw_render_loop( Scene *scene = DEG_get_evaluated_scene(depsgraph); RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id); - DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, object_mode, NULL); + DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, NULL); } /* @viewport CAN be NULL, in this case we create one. */ void DRW_draw_render_loop_offscreen( struct Depsgraph *depsgraph, RenderEngineType *engine_type, - ARegion *ar, View3D *v3d, const eObjectMode object_mode, + ARegion *ar, View3D *v3d, const bool draw_background, GPUOffScreen *ofs, GPUViewport *viewport) { @@ -1318,7 +1324,7 @@ void DRW_draw_render_loop_offscreen( drw_state_prepare_clean_for_draw(&DST); DST.options.is_image_render = true; DST.options.draw_background = draw_background; - DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, object_mode, NULL); + DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, NULL); /* restore */ { @@ -1476,7 +1482,7 @@ void DRW_render_instance_buffer_finish(void) */ void DRW_draw_select_loop( struct Depsgraph *depsgraph, - ARegion *ar, View3D *v3d, const eObjectMode object_mode, + ARegion *ar, View3D *v3d, bool UNUSED(use_obedit_skip), bool UNUSED(use_nearest), const rcti *rect, DRW_SelectPassFn select_pass_fn, void *select_pass_user_data) { @@ -1484,6 +1490,7 @@ void DRW_draw_select_loop( RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id); ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph); Object *obact = OBACT(view_layer); + Object *obedit = OBEDIT_FROM_OBACT(obact); #ifndef USE_GPU_SELECT UNUSED_VARS(vc, scene, view_layer, v3d, ar, rect); #else @@ -1498,12 +1505,12 @@ void DRW_draw_select_loop( bool use_obedit = false; int obedit_mode = 0; - if (object_mode & OB_MODE_EDIT) { - if (obact->type == OB_MBALL) { + if (obedit != NULL) { + if (obedit->type == OB_MBALL) { use_obedit = true; obedit_mode = CTX_MODE_EDIT_METABALL; } - else if (obact->type == OB_ARMATURE) { + else if (obedit->type == OB_ARMATURE) { use_obedit = true; obedit_mode = CTX_MODE_EDIT_ARMATURE; } @@ -1533,7 +1540,7 @@ void DRW_draw_select_loop( .ar = ar, .rv3d = rv3d, .v3d = v3d, .scene = scene, .view_layer = view_layer, .obact = obact, .engine_type = engine_type, - .depsgraph = depsgraph, .object_mode = object_mode, + .depsgraph = depsgraph, }; drw_context_state_init(); drw_viewport_var_init(); @@ -1662,7 +1669,7 @@ static void draw_depth_texture_to_screen(GPUTexture *texture) */ void DRW_draw_depth_loop( Depsgraph *depsgraph, - ARegion *ar, View3D *v3d, const eObjectMode object_mode) + ARegion *ar, View3D *v3d) { Scene *scene = DEG_get_evaluated_scene(depsgraph); RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id); @@ -1706,7 +1713,7 @@ void DRW_draw_depth_loop( .ar = ar, .rv3d = rv3d, .v3d = v3d, .scene = scene, .view_layer = view_layer, .obact = OBACT(view_layer), .engine_type = engine_type, - .depsgraph = depsgraph, .object_mode = object_mode, + .depsgraph = depsgraph, }; drw_context_state_init(); drw_viewport_var_init(); diff --git a/source/blender/draw/intern/draw_view.c b/source/blender/draw/intern/draw_view.c index f38a7689c06..c65ed55561e 100644 --- a/source/blender/draw/intern/draw_view.c +++ b/source/blender/draw/intern/draw_view.c @@ -625,7 +625,7 @@ static bool is_cursor_visible(const DRWContextState *draw_ctx, Scene *scene, Vie } /* exception: object in texture paint mode, clone brush, use_clone_layer disabled */ else if (draw_ctx->object_mode & OB_MODE_TEXTURE_PAINT) { - const Paint *p = BKE_paint_get_active(scene, view_layer, draw_ctx->object_mode); + const Paint *p = BKE_paint_get_active(scene, view_layer); if (p && p->brush && p->brush->imagepaint_tool == PAINT_TOOL_CLONE) { if ((scene->toolsettings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_CLONE) == 0) { -- cgit v1.2.3