Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Erwin <significant.bit@gmail.com>2017-03-23 23:27:57 +0300
committerMike Erwin <significant.bit@gmail.com>2017-03-23 23:28:20 +0300
commit5d6e9f237be3379b63169f86b8f4117752d095b3 (patch)
tree09731b56b14e453e9b2ce2715c7403af1b496e2d /source/blender/editors/space_view3d/view3d_draw_legacy.c
parent96e1b46791d57b81ac34ab42b782471c0099d291 (diff)
OpenGL: viewport background & depth buffer fixes
Untangling some of the logic in view3d_draw.
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_draw_legacy.c')
-rw-r--r--source/blender/editors/space_view3d/view3d_draw_legacy.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c
index 3ea3214231a..27e4dec9d23 100644
--- a/source/blender/editors/space_view3d/view3d_draw_legacy.c
+++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c
@@ -1178,7 +1178,7 @@ float view3d_depth_near(ViewDepths *d)
void ED_view3d_draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d)
{
- short zbuf = v3d->zbuf;
+ bool zbuf = v3d->zbuf;
RegionView3D *rv3d = ar->regiondata;
view3d_winmatrix_set(ar, v3d, NULL);
@@ -1198,8 +1198,9 @@ void ED_view3d_draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d)
if (v3d->flag2 & V3D_SHOW_GPENCIL) {
ED_gpencil_draw_view3d(NULL, scene, v3d, ar, true);
}
-
+
v3d->zbuf = zbuf;
+ if (!zbuf) glDisable(GL_DEPTH_TEST);
}
void ED_view3d_draw_depth(Scene *scene, ARegion *ar, View3D *v3d, bool alphaoverride)
@@ -1774,11 +1775,20 @@ void ED_view3d_draw_offscreen_init(Scene *scene, SceneLayer *sl, View3D *v3d)
*/
static void view3d_main_region_clear(Scene *scene, View3D *v3d, ARegion *ar)
{
+ glClear(GL_DEPTH_BUFFER_BIT);
+
+ glMatrixMode(GL_PROJECTION);
+ gpuLoadIdentity();
+ glMatrixMode(GL_MODELVIEW);
+ gpuLoadIdentity();
+
if (scene->world && (v3d->flag3 & V3D_SHOW_WORLD)) {
VP_view3d_draw_background_world(scene, v3d, ar->regiondata);
}
else {
VP_view3d_draw_background_none();
+
+ glEnable(GL_DEPTH_TEST);
}
}
@@ -2410,9 +2420,6 @@ static void view3d_main_region_draw_objects(const bContext *C, Scene *scene, Sce
do_compositing = GPU_fx_compositor_initialize_passes(rv3d->compositor, &ar->winrct, &ar->drawrct, &fx_settings);
}
- /* clear the background */
- view3d_main_region_clear(scene, v3d, ar);
-
/* enables anti-aliasing for 3D view drawing */
if (win->multisamples != USER_MULTISAMPLE_NONE) {
glEnable(GL_MULTISAMPLE);
@@ -2524,18 +2531,20 @@ void view3d_main_region_draw_legacy(const bContext *C, ARegion *ar)
/* draw viewport using opengl */
if (v3d->drawtype != OB_RENDER || !view3d_main_region_do_render_draw(scene) || clip_border) {
+ view3d_main_region_clear(scene, v3d, ar); /* background */
view3d_main_region_draw_objects(C, scene, sl, v3d, ar, &grid_unit);
if (G.debug & G_DEBUG_SIMDATA)
draw_sim_debug_data(scene, v3d, ar);
-
+
+ glDisable(GL_DEPTH_TEST);
ED_region_pixelspace(ar);
}
/* draw viewport using external renderer */
if (v3d->drawtype == OB_RENDER)
view3d_main_region_draw_engine(C, scene, ar, v3d, clip_border, &border_rect);
-
+
view3d_main_region_draw_info(C, scene, ar, v3d, grid_unit, render_border);
v3d->flag |= V3D_INVALID_BACKBUF;