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;