From ef73668eb974a0d7940f3f808c8fd52b4cdf55db Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Wed, 19 Jan 2022 17:47:55 +0000 Subject: [PATCH] backend: gl: fix read_pixel Signed-off-by: Yuxuan Shui --- src/backend/gl/gl_common.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/backend/gl/gl_common.c b/src/backend/gl/gl_common.c index f36e834..87b71bf 100644 --- a/src/backend/gl/gl_common.c +++ b/src/backend/gl/gl_common.c @@ -1918,6 +1918,12 @@ bool gl_read_pixel(backend_t *base attr_unused, void *image_data, int x, int y, struct color *output) { struct backend_image *tex = image_data; auto inner = (struct gl_texture *)tex->inner; + GLuint fbo; + glGenFramebuffers(1, &fbo); + glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo); + glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, + inner->texture, 0); + glReadBuffer(GL_COLOR_ATTACHMENT0); GLfloat color[4]; glReadPixels(x, inner->y_inverted ? inner->height - y : y, 1, 1, GL_RGBA, GL_FLOAT, color); @@ -1926,6 +1932,9 @@ bool gl_read_pixel(backend_t *base attr_unused, void *image_data, int x, int y, output->green = color[1]; output->blue = color[2]; + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + glDeleteFramebuffers(1, &fbo); + bool ret = glGetError() == GL_NO_ERROR; gl_clear_err(); return ret;