diff options
author | Antony Riakiotakis <kalast@gmail.com> | 2013-03-04 20:34:37 +0400 |
---|---|---|
committer | Antony Riakiotakis <kalast@gmail.com> | 2013-03-04 20:34:37 +0400 |
commit | 9de5c35ce0c0b05fab133c339eba0deab313a7db (patch) | |
tree | 42bceffd664709a89b75fd054d3b9412cfee8bd2 | |
parent | f5a28a288b6b345e6b93d95166c2f64da1bd535a (diff) |
Avoid clearing the depth buffer when using full screen quads for
gradients
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 2a2293c7d4f..323ee6642df 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2996,7 +2996,7 @@ static void view3d_main_area_clear(Scene *scene, View3D *v3d, ARegion *ar) #define VIEWGRAD_RES_Y 16 GLubyte grid_col[VIEWGRAD_RES_X][VIEWGRAD_RES_Y][4]; - static float grid_pos[VIEWGRAD_RES_X][VIEWGRAD_RES_Y][2]; + static float grid_pos[VIEWGRAD_RES_X][VIEWGRAD_RES_Y][3]; static GLushort indices[VIEWGRAD_RES_X - 1][VIEWGRAD_RES_X - 1][4]; static char buf_calculated = FALSE; @@ -3005,8 +3005,6 @@ static void view3d_main_area_clear(Scene *scene, View3D *v3d, ARegion *ar) IMB_colormanagement_pixel_to_display_space_v3(col_zen, &scene->world->zenr, &scene->view_settings, &scene->display_settings); - glClear(GL_DEPTH_BUFFER_BIT); - glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); @@ -3026,6 +3024,7 @@ static void view3d_main_area_clear(Scene *scene, View3D *v3d, ARegion *ar) /* -1..1 range */ grid_pos[x][y][0] = (xf - 0.5f) * 2.0f; grid_pos[x][y][1] = (yf - 0.5f) * 2.0f; + grid_pos[x][y][2] = 1.0; } } @@ -3079,15 +3078,22 @@ static void view3d_main_area_clear(Scene *scene, View3D *v3d, ARegion *ar) } } + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_ALWAYS); + glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); - glVertexPointer(2, GL_FLOAT, 0, grid_pos); + glVertexPointer(3, GL_FLOAT, 0, grid_pos); glColorPointer(4, GL_UNSIGNED_BYTE, 0, grid_col); glDrawElements(GL_QUADS, (VIEWGRAD_RES_X - 1) * (VIEWGRAD_RES_Y - 1) * 4, GL_UNSIGNED_SHORT, indices); + glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY); + glDepthFunc(GL_LEQUAL); + glDisable(GL_DEPTH_TEST); + glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); @@ -3109,9 +3115,6 @@ static void view3d_main_area_clear(Scene *scene, View3D *v3d, ARegion *ar) } else { if (UI_GetThemeValue(TH_SHOW_BACK_GRAD)) { - /* only clear depth buffer here */ - glClear(GL_DEPTH_BUFFER_BIT); - glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); @@ -3119,17 +3122,22 @@ static void view3d_main_area_clear(Scene *scene, View3D *v3d, ARegion *ar) glPushMatrix(); glLoadIdentity(); + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_ALWAYS); glShadeModel(GL_SMOOTH); glBegin(GL_QUADS); UI_ThemeColor(TH_LOW_GRAD); - glVertex2f(-1.0, -1.0); - glVertex2f(1.0, -1.0); + glVertex3f(-1.0, -1.0, 1.0); + glVertex3f(1.0, -1.0, 1.0); UI_ThemeColor(TH_HIGH_GRAD); - glVertex2f(1.0, 1.0); - glVertex2f(-1.0, 1.0); + glVertex3f(1.0, 1.0, 1.0); + glVertex3f(-1.0, 1.0, 1.0); glEnd(); glShadeModel(GL_FLAT); + glDepthFunc(GL_LEQUAL); + glDisable(GL_DEPTH_TEST); + glMatrixMode(GL_PROJECTION); glPopMatrix(); |