From 625d72ed48dfe16efcf3ac62ba66cc367539dc15 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 16 Dec 2017 18:55:42 +1100 Subject: Manipulator: draw 2d manipulators over view border Needed so passepartout doesn't cover 2d manipulators. --- source/blender/draw/intern/draw_manager.c | 8 ++++++-- source/blender/draw/intern/draw_view.c | 34 +++++++++++-------------------- source/blender/draw/intern/draw_view.h | 5 +++-- 3 files changed, 21 insertions(+), 26 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 cb5d4a4414e..e17aef34d47 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -3456,10 +3456,14 @@ void DRW_draw_render_loop_ex( if (DST.draw_ctx.evil_C) { /* needed so manipulator isn't obscured */ glDisable(GL_DEPTH_TEST); - DRW_draw_manipulator(); - glEnable(GL_DEPTH_TEST); + DRW_draw_manipulator_3d(); DRW_draw_region_info(); + + /* Draw 2D after region info so we can draw on top of the camera passepartout overlay. + * 'DRW_draw_region_info' sets the projection in pixel-space. */ + DRW_draw_manipulator_2d(); + glEnable(GL_DEPTH_TEST); } DRW_stats_reset(); diff --git a/source/blender/draw/intern/draw_view.c b/source/blender/draw/intern/draw_view.c index 474d6ac8769..391c29e511f 100644 --- a/source/blender/draw/intern/draw_view.c +++ b/source/blender/draw/intern/draw_view.c @@ -715,16 +715,13 @@ void DRW_draw_cursor(void) /* **************************** 3D Manipulator ******************************** */ -void DRW_draw_manipulator(void) +void DRW_draw_manipulator_3d(void) { const DRWContextState *draw_ctx = DRW_context_state_get(); View3D *v3d = draw_ctx->v3d; v3d->zbuf = false; ARegion *ar = draw_ctx->ar; - - /* TODO, only draws 3D manipulators right now, need to see how 2D drawing will work in new viewport */ - /* draw depth culled manipulators - manipulators need to be updated *after* view matrix was set up */ /* TODO depth culling manipulators is not yet supported, just drawing _3D here, should * later become _IN_SCENE (and draw _3D separate) */ @@ -732,25 +729,18 @@ void DRW_draw_manipulator(void) ar->manipulator_map, draw_ctx->evil_C, WM_MANIPULATORMAP_DRAWSTEP_3D); - /* We may want to split this into a separate pass. - * or maintain a stage in the draw manager where all pixel-space drawing happens. */ - { - float original_proj[4][4]; - gpuGetProjectionMatrix(original_proj); - wmOrtho2_region_pixelspace(ar); - - gpuPushMatrix(); - gpuLoadIdentity(); - - glDepthMask(GL_FALSE); +} - WM_manipulatormap_draw( - ar->manipulator_map, draw_ctx->evil_C, - WM_MANIPULATORMAP_DRAWSTEP_2D); +void DRW_draw_manipulator_2d(void) +{ + const DRWContextState *draw_ctx = DRW_context_state_get(); + View3D *v3d = draw_ctx->v3d; + v3d->zbuf = false; + ARegion *ar = draw_ctx->ar; - glDepthMask(GL_TRUE); + WM_manipulatormap_draw( + ar->manipulator_map, draw_ctx->evil_C, + WM_MANIPULATORMAP_DRAWSTEP_2D); - gpuPopMatrix(); - gpuLoadProjectionMatrix(original_proj); - } + glDepthMask(GL_TRUE); } diff --git a/source/blender/draw/intern/draw_view.h b/source/blender/draw/intern/draw_view.h index b400ceeffa2..203420483a7 100644 --- a/source/blender/draw/intern/draw_view.h +++ b/source/blender/draw/intern/draw_view.h @@ -30,6 +30,7 @@ void DRW_draw_grid(void); void DRW_draw_region_info(void); void DRW_draw_background(void); void DRW_draw_cursor(void); -void DRW_draw_manipulator(void); +void DRW_draw_manipulator_3d(void); +void DRW_draw_manipulator_2d(void); -#endif /* __DRAW_VIEW_H__ */ \ No newline at end of file +#endif /* __DRAW_VIEW_H__ */ -- cgit v1.2.3