screenshooter: Grab pixel data directly before buffer swap
diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c
index afd9121..3260c8e 100644
--- a/src/compositor-wayland.c
+++ b/src/compositor-wayland.c
@@ -357,6 +357,8 @@
 
 	draw_border(output);
 
+	weston_output_do_read_pixels(&output->base);
+
 	eglSwapBuffers(compositor->base.display, output->egl_surface);
 	callback = wl_surface_frame(output->parent.surface);
 	wl_callback_add_listener(callback, &frame_listener, output);
@@ -377,21 +379,6 @@
 	return;
 }
 
-static void
-wayland_output_read_pixels(struct weston_output *output_base, void *data)
-{
-	struct wayland_output *output = (struct wayland_output *) output_base;
-	struct wayland_compositor *compositor =
-		(struct wayland_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
 wayland_compositor_create_output(struct wayland_compositor *c,
 				 int width, int height)
@@ -460,7 +447,6 @@
 	output->base.repaint = wayland_output_repaint;
 	output->base.destroy = wayland_output_destroy;
 	output->base.assign_planes = NULL;
-	output->base.read_pixels = wayland_output_read_pixels;
 	output->base.set_backlight = NULL;
 	output->base.set_dpms = NULL;
 	output->base.switch_mode = NULL;