summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2021-12-25 15:06:12 +0100
committerBenjamin Otte <otte@redhat.com>2021-12-25 15:07:44 +0100
commit2ce2afa03697b4bb40a6e0b59e4ac83dfd8e2f23 (patch)
tree3e8a134c3bc66c8b05e23e1e56a9e8dbd5bd55f4
parent5803dd765dcc1584d09e1e5e7d7d635e40e63347 (diff)
downloadgtk+-2ce2afa03697b4bb40a6e0b59e4ac83dfd8e2f23.tar.gz
gles: Be picky abpout glGetFramebufferAttachmentParameter()
This function does not at all work like in OpenGL - if it works at all. So make it behave accordingly. Fixes #4571
-rw-r--r--gsk/gl/gskglrenderjob.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gsk/gl/gskglrenderjob.c b/gsk/gl/gskglrenderjob.c
index a0df3e2990..0efa8ae108 100644
--- a/gsk/gl/gskglrenderjob.c
+++ b/gsk/gl/gskglrenderjob.c
@@ -4117,14 +4117,19 @@ gsk_gl_render_job_set_debug_fallback (GskGLRenderJob *job,
}
static int
-get_framebuffer_format (guint framebuffer)
+get_framebuffer_format (GdkGLContext *context,
+ guint framebuffer)
{
int size;
+ if (!gdk_gl_context_check_version (context, 0, 0, 3, 0))
+ return GL_RGBA8;
+
glBindFramebuffer (GL_FRAMEBUFFER, framebuffer);
glGetFramebufferAttachmentParameteriv (GL_FRAMEBUFFER,
framebuffer ? GL_COLOR_ATTACHMENT0
- : GL_BACK_LEFT,
+ : gdk_gl_context_get_use_es (context) ? GL_BACK
+ : GL_BACK_LEFT,
GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE, &size);
if (size > 16)
@@ -4161,7 +4166,7 @@ gsk_gl_render_job_new (GskGLDriver *driver,
job->scale_x = scale_factor;
job->scale_y = scale_factor;
job->viewport = *viewport;
- job->target_format = get_framebuffer_format (framebuffer);
+ job->target_format = get_framebuffer_format (job->command_queue->context, framebuffer);
gsk_gl_render_job_set_alpha (job, 1.0f);
gsk_gl_render_job_set_projection_from_rect (job, viewport, NULL);