Move read_pixels from output to renderer

This commit is contained in:
emersion 2017-10-08 02:11:56 +02:00
parent 55c063f440
commit 0ce3135304
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
9 changed files with 64 additions and 36 deletions

View file

@ -226,7 +226,23 @@ static bool wlr_gles2_buffer_is_drm(struct wlr_renderer *_renderer,
(struct wlr_gles2_renderer *)_renderer;
EGLint format;
return wlr_egl_query_buffer(renderer->egl, buffer,
EGL_TEXTURE_FORMAT, &format);
EGL_TEXTURE_FORMAT, &format);
}
static void rgba_to_argb(uint32_t *data, size_t height, size_t stride) {
size_t n = height*stride/4;
for (size_t i = 0; i < n; ++i) {
uint32_t v = data[i];
uint32_t rgb = (v & 0xffffff00) >> 8;
uint32_t a = v & 0x000000ff;
data[i] = rgb | (a << 24);
}
}
static void wlr_gles2_read_pixels(struct wlr_renderer *renderer, int x, int y,
int width, int height, void *out_data) {
glReadPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, out_data);
rgba_to_argb(out_data, height, width*4);
}
static struct wlr_renderer_impl wlr_renderer_impl = {
@ -238,6 +254,7 @@ static struct wlr_renderer_impl wlr_renderer_impl = {
.render_ellipse = wlr_gles2_render_ellipse,
.formats = wlr_gles2_formats,
.buffer_is_drm = wlr_gles2_buffer_is_drm,
.read_pixels = wlr_gles2_read_pixels,
};
struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_backend *backend) {