Fix T43697, grid drawing over wires and grease pencil. Props to Julian

for figuring out a simple solution to that :)
This commit is contained in:
Antony Riakiotakis 2015-02-17 11:37:20 +01:00
parent cdc1dab073
commit 2c1b0536c9

@ -2656,8 +2656,6 @@ void ED_view3d_update_viewmat(Scene *scene, View3D *v3d, ARegion *ar, float view
}
}
/**
* Shared by #ED_view3d_draw_offscreen and #view3d_main_area_draw_objects
*
@ -2673,8 +2671,10 @@ static void view3d_draw_objects(
RegionView3D *rv3d = ar->regiondata;
Base *base;
const bool do_camera_frame = !draw_offscreen;
const bool draw_floor = (rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO);
const bool draw_grids = !draw_offscreen && (v3d->flag2 & V3D_RENDER_OVERRIDE) == 0;
const bool draw_floor = (rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO);
/* only draw grids after in solid modes, else it hovers over mesh wires */
const bool draw_grids_after = draw_grids && draw_floor && (v3d->drawtype > OB_WIRE);
bool xrayclear = true;
if (!draw_offscreen) {
@ -2722,6 +2722,9 @@ static void view3d_draw_objects(
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(rv3d->viewmat);
}
else {
drawfloor(scene, v3d, grid_unit);
}
}
/* important to do before clipping */
@ -2796,6 +2799,11 @@ static void view3d_draw_objects(
}
}
/* perspective floor goes last to use scene depth and avoid writing to depth buffer */
if (draw_grids_after) {
drawfloor(scene, v3d, grid_unit);
}
/* must be before xray draw which clears the depth buffer */
if (v3d->flag2 & V3D_SHOW_GPENCIL) {
/* must be before xray draw which clears the depth buffer */
@ -2804,11 +2812,6 @@ static void view3d_draw_objects(
if (v3d->zbuf) glEnable(GL_DEPTH_TEST);
}
/* perspective floor goes last to use scene depth and avoid writing to depth buffer */
if (draw_grids && draw_floor) {
drawfloor(scene, v3d, grid_unit);
}
/* transp and X-ray afterdraw stuff */
if (v3d->afterdraw_transp.first) view3d_draw_transp(scene, ar, v3d);
if (v3d->afterdraw_xray.first) view3d_draw_xray(scene, ar, v3d, &xrayclear);