From 2fa7b5573dd37da7a34e66fd81f7176e875285fb Mon Sep 17 00:00:00 2001 From: Robert Bragg Date: Mon, 4 Mar 2013 21:46:08 +0000 Subject: [PATCH] gl: ensure depth isn't masked during clear If a pipeline has been flushed that disables depth writing and then we try to clear the framebuffer with cogl_framebuffer_clear4f, passing COGL_BUFFER_BIT_DEPTH then we need to make sure that depth writing is re-enabled before issuing the glClear call. We also need to make sure that when the next primitive is flushed that we re-check what state the depth mask should be in. Reviewed-by: Neil Roberts (cherry picked from commit 3cf497042897d1aa6918bc55b71a36ff67e560b9) --- cogl/driver/gl/cogl-framebuffer-gl.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/cogl/driver/gl/cogl-framebuffer-gl.c b/cogl/driver/gl/cogl-framebuffer-gl.c index 18c9371d6..660098e7f 100644 --- a/cogl/driver/gl/cogl-framebuffer-gl.c +++ b/cogl/driver/gl/cogl-framebuffer-gl.c @@ -890,7 +890,21 @@ _cogl_framebuffer_gl_clear (CoglFramebuffer *framebuffer, } if (buffers & COGL_BUFFER_BIT_DEPTH) - gl_buffers |= GL_DEPTH_BUFFER_BIT; + { + gl_buffers |= GL_DEPTH_BUFFER_BIT; + + if (ctx->depth_writing_enabled_cache != TRUE) + { + GE( ctx, glDepthMask (TRUE)); + + ctx->depth_writing_enabled_cache = TRUE; + + /* Make sure the DepthMask is updated when the next primitive is drawn */ + ctx->current_pipeline_changes_since_flush |= + COGL_PIPELINE_STATE_DEPTH; + ctx->current_pipeline_age--; + } + } if (buffers & COGL_BUFFER_BIT_STENCIL) gl_buffers |= GL_STENCIL_BUFFER_BIT;