diff options
author | dec05eba <dec05eba@protonmail.com> | 2025-06-09 22:07:52 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2025-06-09 22:07:52 +0200 |
commit | 3ba1dbda98fcf221eb92d241b753ccdef9eb2a08 (patch) | |
tree | 12043c848fd0b644c41ffc15834b95f4ac871e28 /src/image_writer.c | |
parent | a849d2cdadbc0460cf62ddbd790c982f46143198 (diff) |
Fix screen and portal capture not working on some intel gpus
Diffstat (limited to 'src/image_writer.c')
-rw-r--r-- | src/image_writer.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/image_writer.c b/src/image_writer.c index e153a34..3d731a0 100644 --- a/src/image_writer.c +++ b/src/image_writer.c @@ -71,11 +71,15 @@ static bool gsr_image_writer_write_opengl_texture_to_file(gsr_image_writer *self return false; } - // TODO: hdr support - self->egl->glBindTexture(GL_TEXTURE_2D, self->texture); - // We could use glGetTexSubImage, but it's only available starting from opengl 4.5 - self->egl->glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, frame_data); - self->egl->glBindTexture(GL_TEXTURE_2D, 0); + unsigned int fbo = 0; + self->egl->glGenFramebuffers(1, &fbo); + self->egl->glBindFramebuffer(GL_FRAMEBUFFER, fbo); + self->egl->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, self->texture, 0); + + self->egl->glReadPixels(0, 0, self->width, self->height, GL_RGBA, GL_UNSIGNED_BYTE, frame_data); + + self->egl->glBindFramebuffer(GL_FRAMEBUFFER, 0); + self->egl->glDeleteFramebuffers(1, &fbo); self->egl->glFlush(); self->egl->glFinish(); |