screenshooter: Grab pixel data directly before buffer swap
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 837da8c..dcd5e99 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -215,6 +215,8 @@
wl_list_for_each_reverse(surface, &compositor->base.surface_list, link)
weston_surface_draw(surface, &output->base, damage);
+ weston_output_do_read_pixels(&output->base);
+
eglSwapBuffers(compositor->base.display, output->egl_surface);
output->next_bo = gbm_surface_lock_front_buffer(output->surface);
if (!output->next_bo) {
@@ -1190,21 +1192,6 @@
drmModeFreeConnector(connector);
}
-static void
-drm_output_read_pixels(struct weston_output *output_base, void *data)
-{
- struct drm_output *output = (struct drm_output *) output_base;
- struct drm_compositor *compositor =
- (struct drm_compositor *) output->base.compositor;
-
- eglMakeCurrent(compositor->base.display, output->egl_surface,
- output->egl_surface, compositor->base.context);
-
- glReadPixels(0, 0, output_base->current->width,
- output_base->current->height,
- compositor->base.read_format, GL_UNSIGNED_BYTE, data);
-}
-
static int
create_output_for_connector(struct drm_compositor *ec,
drmModeRes *resources,
@@ -1313,7 +1300,6 @@
output->base.repaint = drm_output_repaint;
output->base.destroy = drm_output_destroy;
output->base.assign_planes = drm_assign_planes;
- output->base.read_pixels = drm_output_read_pixels;
output->base.set_dpms = drm_set_dpms;
output->base.switch_mode = drm_output_switch_mode;