void cogl_read_pixels (int x, int y, int width, int height, CoglReadPixelsFlags source, CoglPixelFormat format, uint8_t *pixels) { int bpp = _cogl_pixel_format_get_bytes_per_pixel (format); CoglBitmap *bitmap; _COGL_GET_CONTEXT (ctx, NO_RETVAL); bitmap = cogl_bitmap_new_for_data (ctx, width, height, format, bpp * width, /* rowstride */ pixels); cogl_framebuffer_read_pixels_into_bitmap (_cogl_get_read_framebuffer (), x, y, source, bitmap); cogl_object_unref (bitmap); }
static void do_grab_screenshot (_screenshot_data *screenshot_data, int x, int y, int width, int height) { CoglBitmap *bitmap; ClutterBackend *backend; CoglContext *context; int stride; guchar *data; backend = clutter_get_default_backend (); context = clutter_backend_get_cogl_context (backend); screenshot_data->image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); data = cairo_image_surface_get_data (screenshot_data->image); stride = cairo_image_surface_get_stride (screenshot_data->image); bitmap = cogl_bitmap_new_for_data (context, width, height, CLUTTER_CAIRO_FORMAT_ARGB32, stride, data); cogl_framebuffer_read_pixels_into_bitmap (cogl_get_draw_framebuffer (), x, y, COGL_READ_PIXELS_COLOR_BUFFER, bitmap); cairo_surface_mark_dirty (screenshot_data->image); cogl_object_unref (bitmap); }