Merge pull request #140 from emersion/screenshooter

Add screenshooter
This commit is contained in:
Drew DeVault 2017-10-08 10:06:41 -04:00 committed by GitHub
commit 9e1ff2dce9
15 changed files with 553 additions and 14 deletions

View file

@ -208,7 +208,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 = {
@ -220,6 +236,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) {

View file

@ -51,3 +51,8 @@ bool wlr_renderer_buffer_is_drm(struct wlr_renderer *r,
struct wl_resource *buffer) {
return r->impl->buffer_is_drm(r, buffer);
}
void wlr_renderer_read_pixels(struct wlr_renderer *r, int x, int y,
int width, int height, void *out_data) {
r->impl->read_pixels(r, x, y, width, height, out_data);
}