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 <neil@linux.intel.com>

(cherry picked from commit 3cf497042897d1aa6918bc55b71a36ff67e560b9)
This commit is contained in:
Robert Bragg 2013-03-04 21:46:08 +00:00
parent 3c5ebb8752
commit 2fa7b5573d

View File

@ -890,8 +890,22 @@ _cogl_framebuffer_gl_clear (CoglFramebuffer *framebuffer,
} }
if (buffers & COGL_BUFFER_BIT_DEPTH) 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) if (buffers & COGL_BUFFER_BIT_STENCIL)
gl_buffers |= GL_STENCIL_BUFFER_BIT; gl_buffers |= GL_STENCIL_BUFFER_BIT;