[PATCH weston 4/5] gl-renderer: fix pixel format used in texture uploads when using R/RG textures
Arnaud Vrac
rawoul at gmail.com
Wed Nov 29 14:07:09 UTC 2017
From: Arnaud Vrac <avrac at freebox.fr>
In glTexImage2D / glTexSubImage2D calls, the only pixel formats allowed
for the GL_R8 and GL_RG internal formats are respectively GL_RED and
GL_RG [1].
Make sure we match this requirement, as some drivers will fail with the
current code.
[1] https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml, Table 2
---
libweston/gl-renderer.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/libweston/gl-renderer.c b/libweston/gl-renderer.c
index 3dce8c2f..60a7bf06 100644
--- a/libweston/gl-renderer.c
+++ b/libweston/gl-renderer.c
@@ -1391,6 +1391,18 @@ gl_renderer_read_pixels(struct weston_output *output,
return 0;
}
+static GLenum gl_format_from_internal(GLenum internal_format)
+{
+ switch (internal_format) {
+ case GL_R8_EXT:
+ return GL_RED_EXT;
+ case GL_RG8_EXT:
+ return GL_RG_EXT;
+ default:
+ return internal_format;
+ }
+}
+
static void
gl_renderer_flush_damage(struct weston_surface *surface)
{
@@ -1439,7 +1451,7 @@ gl_renderer_flush_damage(struct weston_surface *surface)
gs->pitch / gs->hsub[j],
buffer->height / gs->vsub[j],
0,
- gs->gl_format[j],
+ gl_format_from_internal(gs->gl_format[j]),
gs->gl_pixel_type,
data + gs->offset[j]);
}
@@ -1461,7 +1473,7 @@ gl_renderer_flush_damage(struct weston_surface *surface)
gs->pitch / gs->hsub[j],
buffer->height / gs->vsub[j],
0,
- gs->gl_format[j],
+ gl_format_from_internal(gs->gl_format[j]),
gs->gl_pixel_type,
data + gs->offset[j]);
}
@@ -1485,7 +1497,7 @@ gl_renderer_flush_damage(struct weston_surface *surface)
r.y1 / gs->vsub[j],
(r.x2 - r.x1) / gs->hsub[j],
(r.y2 - r.y1) / gs->vsub[j],
- gs->gl_format[j],
+ gl_format_from_internal(gs->gl_format[j]),
gs->gl_pixel_type,
data + gs->offset[j]);
}
--
2.15.0
More information about the wayland-devel
mailing list