diff options
-rw-r--r-- | include/render/gles2.h | 2 | ||||
-rw-r--r-- | render/gles2/pixel_format.c | 19 | ||||
-rw-r--r-- | render/gles2/renderer.c | 15 |
3 files changed, 24 insertions, 12 deletions
diff --git a/include/render/gles2.h b/include/render/gles2.h index 9ff09065..43a8d648 100644 --- a/include/render/gles2.h +++ b/include/render/gles2.h @@ -21,6 +21,7 @@ struct gles2_pixel_format { uint32_t wl_format; GLint gl_format, gl_type; int depth, bpp; + bool has_alpha; }; struct wlr_gles2_renderer { @@ -48,6 +49,7 @@ struct wlr_gles2_texture { }; const struct gles2_pixel_format *gles2_format_from_wl(enum wl_shm_format fmt); +const enum wl_shm_format *gles2_formats(size_t *len); struct wlr_texture *gles2_texture_create(); struct wlr_gles2_texture *gles2_get_texture(struct wlr_texture *wlr_texture); diff --git a/render/gles2/pixel_format.c b/render/gles2/pixel_format.c index 7c34896c..89ba762f 100644 --- a/render/gles2/pixel_format.c +++ b/render/gles2/pixel_format.c @@ -6,13 +6,14 @@ * The wayland formats are little endian while the GL formats are big endian, * so WL_SHM_FORMAT_ARGB8888 is actually compatible with GL_BGRA_EXT. */ -struct gles2_pixel_format formats[] = { +static const struct gles2_pixel_format formats[] = { { .wl_format = WL_SHM_FORMAT_ARGB8888, .depth = 32, .bpp = 32, .gl_format = GL_BGRA_EXT, .gl_type = GL_UNSIGNED_BYTE, + .has_alpha = true, }, { .wl_format = WL_SHM_FORMAT_XRGB8888, @@ -20,6 +21,7 @@ struct gles2_pixel_format formats[] = { .bpp = 32, .gl_format = GL_BGRA_EXT, .gl_type = GL_UNSIGNED_BYTE, + .has_alpha = false, }, { .wl_format = WL_SHM_FORMAT_XBGR8888, @@ -27,6 +29,7 @@ struct gles2_pixel_format formats[] = { .bpp = 32, .gl_format = GL_RGBA, .gl_type = GL_UNSIGNED_BYTE, + .has_alpha = false, }, { .wl_format = WL_SHM_FORMAT_ABGR8888, @@ -34,8 +37,17 @@ struct gles2_pixel_format formats[] = { .bpp = 32, .gl_format = GL_RGBA, .gl_type = GL_UNSIGNED_BYTE, + .has_alpha = true, }, }; + +static const enum wl_shm_format wl_formats[] = { + WL_SHM_FORMAT_ARGB8888, + WL_SHM_FORMAT_XRGB8888, + WL_SHM_FORMAT_ABGR8888, + WL_SHM_FORMAT_XBGR8888, +}; + // TODO: more pixel formats const struct gles2_pixel_format *gles2_format_from_wl(enum wl_shm_format fmt) { @@ -46,3 +58,8 @@ const struct gles2_pixel_format *gles2_format_from_wl(enum wl_shm_format fmt) { } return NULL; } + +const enum wl_shm_format *gles2_formats(size_t *len) { + *len = sizeof(wl_formats) / sizeof(wl_formats[0]); + return wl_formats; +} diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c index 6b046bc4..2d05932c 100644 --- a/render/gles2/renderer.c +++ b/render/gles2/renderer.c @@ -179,16 +179,9 @@ static void gles2_render_ellipse(struct wlr_renderer *wlr_renderer, GLES2_DEBUG_POP; } -static const enum wl_shm_format *gles2_formats( - struct wlr_renderer *renderer, size_t *len) { - static const enum wl_shm_format formats[] = { - WL_SHM_FORMAT_ARGB8888, - WL_SHM_FORMAT_XRGB8888, - WL_SHM_FORMAT_ABGR8888, - WL_SHM_FORMAT_XBGR8888, - }; - *len = sizeof(formats) / sizeof(formats[0]); - return formats; +static const enum wl_shm_format *gles2_renderer_formats( + struct wlr_renderer *wlr_renderer, size_t *len) { + return gles2_formats(len); } static bool gles2_buffer_is_drm(struct wlr_renderer *wlr_renderer, @@ -266,7 +259,7 @@ static const struct wlr_renderer_impl renderer_impl = { .render_texture_with_matrix = gles2_render_texture_with_matrix, .render_quad = gles2_render_quad, .render_ellipse = gles2_render_ellipse, - .formats = gles2_formats, + .formats = gles2_renderer_formats, .buffer_is_drm = gles2_buffer_is_drm, .read_pixels = gles2_read_pixels, .format_supported = gles2_format_supported, |