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:
parent
3c5ebb8752
commit
2fa7b5573d
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user