From 6d155dc46206f69aa704c184d40f74274a4ec0cd Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Fri, 11 May 2018 08:16:41 +0200 Subject: T54983: Bone selection overlay Bone selection overlay is only available in pose mode. and when active overrules the selection buffer. This is currently `tricked` by switching the draw engines, but this is an exception. Not sure how to solve this in a better way. After this is solved we can look at how to localize the dim effect to only the objects connected to the active armatures. Currently it dims the whole screen (including background). @campbellbarton I added you as reviewer as it you have done a lot in the DRW_draw_select_loop Reviewers: campbellbarton, fclem Reviewed By: fclem Subscribers: campbellbarton Tags: #bf_blender_2.8, #code_quest Maniphest Tasks: T54983 Differential Revision: https://developer.blender.org/D3241 --- source/blender/draw/intern/draw_manager.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'source/blender/draw/intern') diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index f18e2d119dc..98fe737410f 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -1570,6 +1570,15 @@ void DRW_draw_select_loop( obedit_mode = CTX_MODE_EDIT_ARMATURE; } } + bool use_bone_selection_overlay = false; + if (v3d->overlay.flag &= V3D_OVERLAY_BONE_SELECTION) { + if (!(v3d->flag2 &= V3D_RENDER_OVERRIDE)) { + Object *obpose = OBPOSE_FROM_OBACT(obact); + if (obpose) { + use_bone_selection_overlay = true; + } + } + } struct GPUViewport *viewport = GPU_viewport_create(); GPU_viewport_size_set(viewport, (const int[2]){BLI_rcti_size_x(rect), BLI_rcti_size_y(rect)}); @@ -1584,8 +1593,17 @@ void DRW_draw_select_loop( drw_engines_enable_from_mode(obedit_mode); } else { - drw_engines_enable_basic(); - drw_engines_enable_from_object_mode(); + /* when in pose mode and overlays enable and bone selection overlay + active, switch order as the bone selection must have more precedence + than the rest of the scene */ + if (use_bone_selection_overlay) { + drw_engines_enable_from_object_mode(); + drw_engines_enable_basic(); + } + else { + drw_engines_enable_basic(); + drw_engines_enable_from_object_mode(); + } } /* Setup viewport */ -- cgit v1.2.3