From e2b4bae92c27e13d7f8ddba92950445a85a363cb Mon Sep 17 00:00:00 2001 From: Bryce Harrington Date: Thu, 27 Mar 2014 16:23:09 -0700 Subject: Fix skia image writing so it'll work with EGL. Fixes warnings printed about incorrect stride. --- src/caskbench.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'src/caskbench.cpp') diff --git a/src/caskbench.cpp b/src/caskbench.cpp index 5b0f11e..f818cfb 100644 --- a/src/caskbench.cpp +++ b/src/caskbench.cpp @@ -84,15 +84,26 @@ write_image_file_cairo (const char *fname, caskbench_context_t *context) void write_image_file_skia (const char *fname, caskbench_context_t *context) { - SkBaseDevice *device = context->skia_device; - assert (device); - - const SkBitmap &bitmap = device->accessBitmap(false); - SkAutoLockPixels image_lock(bitmap); - cairo_surface_t* surface = cairo_image_surface_create_for_data((unsigned char*)bitmap.getPixels(), - CAIRO_FORMAT_ARGB32, - bitmap.width(), bitmap.height(), - bitmap.rowBytes()); + SkBitmap bitmap; + void * data; + cairo_surface_t* surface; + + bitmap.setConfig(SkBitmap::kARGB_8888_Config, + context->canvas_width, context->canvas_height, + 4 * context->canvas_width, // TODO: Get from context->skia_device + kPremul_SkAlphaType); + context->skia_canvas->flush(); + if (!context->skia_canvas->readPixels(&bitmap, 0, 0, SkCanvas::kRGBA_Unpremul_Config8888)) { + warnx("Could not read pixels from skia device\n"); + return; + } + + data = bitmap.getPixels(); + assert(data); + surface = cairo_image_surface_create_for_data((unsigned char*)data, + CAIRO_FORMAT_ARGB32, + context->canvas_width, context->canvas_height, + 4 * context->canvas_width); cairo_status_t status = cairo_surface_status (surface); if (status != CAIRO_STATUS_SUCCESS) { -- cgit v1.3.1-4-g156e