From 10f8b4ba81219fb61faa7021a3e2707c6bae1161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Molinari?= Date: Wed, 16 Oct 2024 08:26:26 +0200 Subject: [PATCH] gl-renderer: Adapt gl_fbo_texture_init() to new texture utilities MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Loïc Molinari --- libweston/renderer-gl/gl-renderer-internal.h | 5 ++-- libweston/renderer-gl/gl-renderer.c | 4 ++-- libweston/renderer-gl/gl-utils.c | 25 ++++++++++++-------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/libweston/renderer-gl/gl-renderer-internal.h b/libweston/renderer-gl/gl-renderer-internal.h index ea127a92c..55dc632c4 100644 --- a/libweston/renderer-gl/gl-renderer-internal.h +++ b/libweston/renderer-gl/gl-renderer-internal.h @@ -608,11 +608,10 @@ gl_fbo_image_init(struct gl_renderer *gr, GLuint *rb_out); bool -gl_fbo_texture_init(GLenum internal_format, +gl_fbo_texture_init(struct gl_renderer *gr, + GLenum format, int width, int height, - GLenum format, - GLenum type, GLuint *fb_out, GLuint *tex_out); diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c index 3e69d9b6c..4185edb06 100644 --- a/libweston/renderer-gl/gl-renderer.c +++ b/libweston/renderer-gl/gl-renderer.c @@ -4024,8 +4024,8 @@ gl_renderer_resize_output(struct weston_output *output, if (shadow_exists(go)) gl_fbo_texture_fini(&go->shadow_fb, &go->shadow_tex); - ret = gl_fbo_texture_init(shfmt->gl_format, area->width, area->height, - GL_RGBA, shfmt->gl_type, &go->shadow_fb, + ret = gl_fbo_texture_init(gr, shfmt->gl.internal, area->width, + area->height, &go->shadow_fb, &go->shadow_tex); return ret; diff --git a/libweston/renderer-gl/gl-utils.c b/libweston/renderer-gl/gl-utils.c index e1e32e36f..d87fc6619 100644 --- a/libweston/renderer-gl/gl-utils.c +++ b/libweston/renderer-gl/gl-utils.c @@ -1438,28 +1438,33 @@ gl_fbo_image_init(struct gl_renderer *gr, } /* Initialise a pair of framebuffer and texture objects to render into a - * texture. The framebuffer object is left bound on success. Use + * texture. 'format' is a colour-renderable sized internal format listed in + * Table 1 above with the Renderable column filled. The framebuffer object is + * left bound on the framebuffer target and the texture object is left bound on + * the 2D texture target of the current texture unit on success. Use * gl_fbo_texture_fini() to finalise. */ bool -gl_fbo_texture_init(GLenum internal_format, +gl_fbo_texture_init(struct gl_renderer *gr, + GLenum format, int width, int height, - GLenum format, - GLenum type, GLuint *fb_out, GLuint *tex_out) { GLenum status; GLuint fb, tex; - /* XXX Port to new texture utilities and had sized BGRA8 support. */ + if (!gl_fbo_is_format_supported(gr, format)) { + weston_log("Error: FBO format not supported.\n"); + return false; + } - glGenTextures(1, &tex); - glBindTexture(GL_TEXTURE_2D, tex); - glTexImage2D(GL_TEXTURE_2D, 0, internal_format, width, height, 0, - format, type, NULL); - glBindTexture(GL_TEXTURE_2D, 0); + if (format == GL_BGRA8_EXT && + !gl_features_has(gr, FEATURE_SIZED_BGRA8_RENDERBUFFER)) + format = GL_BGRA_EXT; + + texture_init(gr, GL_TEXTURE_2D, 1, format, width, height, 1, &tex); glGenFramebuffers(1, &fb); glBindFramebuffer(GL_FRAMEBUFFER, fb); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,