aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sokol_gfx.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/sokol_gfx.h b/sokol_gfx.h
index aaadb456..e1ab6cb1 100644
--- a/sokol_gfx.h
+++ b/sokol_gfx.h
@@ -11365,6 +11365,16 @@ _SOKOL_PRIVATE void _sg_gl_begin_pass(const sg_pass* pass, const _sg_attachments
glFramebufferTexture2D(GL_FRAMEBUFFER, gl_att_type, GL_TEXTURE_2D, 0, 0);
}
if (atts->ds_view) {
+ // GLES3 FBO fix: When switching between depth-only and depth-stencil attachments,
+ // explicitly detach BOTH attachment types first. Some GLES3 drivers (e.g., Pixel 8 Pro)
+ // fail with GL_FRAMEBUFFER_UNSUPPORTED if both attachment types are bound to the same FBO,
+ // even if one is bound to a different texture.
+ #if defined(SOKOL_GLES3)
+ glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0);
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, 0, 0);
+ glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0);
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0);
+ #endif
const _sg_view_t* view = atts->ds_view;
const _sg_image_t* img = _sg_image_ref_ptr(&view->cmn.img.ref);
const GLenum gl_att_type = _sg_gl_depth_stencil_attachment_type(img);