diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-12-16 10:55:42 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-12-16 11:05:27 +0300 |
commit | 625d72ed48dfe16efcf3ac62ba66cc367539dc15 (patch) | |
tree | 794fa67168f00adb6a268de2684b9146f3d92d90 /source | |
parent | d855fc4dad10732b479d4f0d7e8fc81b9107108c (diff) |
Manipulator: draw 2d manipulators over view border
Needed so passepartout doesn't cover 2d manipulators.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 8 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_view.c | 34 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_view.h | 5 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw_legacy.c | 11 |
4 files changed, 25 insertions, 33 deletions
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__ */ diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c index 84f0f96fe0b..fa09ca169fe 100644 --- a/source/blender/editors/space_view3d/view3d_draw_legacy.c +++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c @@ -2007,11 +2007,6 @@ static void view3d_main_region_draw_objects(const bContext *C, Scene *scene, Vie /* main drawing call */ view3d_draw_objects(C, &eval_ctx, scene, v3d, ar, grid_unit, true, false, do_compositing ? rv3d->compositor : NULL); - /* 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) */ - WM_manipulatormap_draw(ar->manipulator_map, C, WM_MANIPULATORMAP_DRAWSTEP_3D); - /* post process */ if (do_compositing) { GPU_fx_do_composite_pass(rv3d->compositor, rv3d->winmat, rv3d->is_persp, scene, NULL); @@ -2141,12 +2136,14 @@ void view3d_main_region_draw_legacy(const bContext *C, ARegion *ar) VP_legacy_view3d_main_region_setup_view(&eval_ctx, scene, v3d, ar, NULL, NULL); glClear(GL_DEPTH_BUFFER_BIT); - ED_region_pixelspace(ar); + WM_manipulatormap_draw(ar->manipulator_map, C, WM_MANIPULATORMAP_DRAWSTEP_3D); - WM_manipulatormap_draw(ar->manipulator_map, C, WM_MANIPULATORMAP_DRAWSTEP_2D); + ED_region_pixelspace(ar); view3d_main_region_draw_info(C, scene, ar, v3d, grid_unit, render_border); + WM_manipulatormap_draw(ar->manipulator_map, C, WM_MANIPULATORMAP_DRAWSTEP_2D); + gpuPopProjectionMatrix(); gpuPopMatrix(); |