From 4fa90b05119720a67ccb63cd89246abdb4abf4ea Mon Sep 17 00:00:00 2001 From: emersion Date: Tue, 23 Jan 2018 22:06:54 +0100 Subject: Backport screenshooter fixes from the renderer redesign v1 This backports some changes to #319 to fix the screenshooter data format. This also adds wlr_backend_get_renderer which will be useful to support multiple renderers. --- render/gles2/pixel_format.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'render/gles2/pixel_format.c') diff --git a/render/gles2/pixel_format.c b/render/gles2/pixel_format.c index a0b9d09f..9cc75923 100644 --- a/render/gles2/pixel_format.c +++ b/render/gles2/pixel_format.c @@ -2,7 +2,10 @@ #include #include "render/gles2.h" -// Adapted from weston +/* +* 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 pixel_format formats[] = { { .wl_format = WL_SHM_FORMAT_ARGB8888, -- cgit v1.2.3 From f34a1b75ebd9dbebf4fb9c2cf34d878fce902c03 Mon Sep 17 00:00:00 2001 From: emersion Date: Fri, 26 Jan 2018 23:13:41 +0100 Subject: render/gles2: use format bpp when reading pixels --- render/gles2/pixel_format.c | 4 ++++ render/gles2/renderer.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'render/gles2/pixel_format.c') diff --git a/render/gles2/pixel_format.c b/render/gles2/pixel_format.c index 9cc75923..a544077b 100644 --- a/render/gles2/pixel_format.c +++ b/render/gles2/pixel_format.c @@ -25,12 +25,16 @@ struct pixel_format formats[] = { }, { .wl_format = WL_SHM_FORMAT_XBGR8888, + .depth = 24, + .bpp = 32, .gl_format = GL_RGBA, .gl_type = GL_UNSIGNED_BYTE, .shader = &shaders.rgbx }, { .wl_format = WL_SHM_FORMAT_ABGR8888, + .depth = 32, + .bpp = 32, .gl_format = GL_RGBA, .gl_type = GL_UNSIGNED_BYTE, .shader = &shaders.rgba diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c index 6b1a9c59..cc06ad08 100644 --- a/render/gles2/renderer.c +++ b/render/gles2/renderer.c @@ -229,7 +229,7 @@ static bool wlr_gles2_read_pixels(struct wlr_renderer *renderer, unsigned char *p = data + dst_y * stride; for (size_t i = src_y; i < src_y + height; ++i) { glReadPixels(src_x, src_y + height - i - 1, width, 1, fmt->gl_format, - fmt->gl_type, p + i * stride + dst_x * 4); + fmt->gl_type, p + i * stride + dst_x * fmt->bpp / 8); } return true; -- cgit v1.2.3