From a965b0f95fdeb567f7ccb51f7c8c47735a61e2d9 Mon Sep 17 00:00:00 2001 From: "Henry (Yu) Song" Date: Thu, 29 Mar 2012 01:08:51 +0000 Subject: [PATCH] gl: fix y-axis origin when map_to_image() for non texture GL surface We need to fix y-axis origin when map a GL surface to image surface for non-texture GL surface. Test cases: extended-blend-alpha-mask, extended-blend-mask. Although the image outputs is not right, but the image on the first grid (upper-left corner) is correct comparing to image output. --- src/cairo-gl-surface.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cairo-gl-surface.c b/src/cairo-gl-surface.c index 8bbf93909..32ecf63c4 100644 --- a/src/cairo-gl-surface.c +++ b/src/cairo-gl-surface.c @@ -985,6 +985,7 @@ _cairo_gl_surface_map_to_image (void *abstract_surface, unsigned int cpp; cairo_bool_t invert; cairo_status_t status; + int y; /* Want to use a switch statement here but the compiler gets whiny. */ if (surface->base.content == CAIRO_CONTENT_COLOR_ALPHA) { @@ -1065,7 +1066,12 @@ _cairo_gl_surface_map_to_image (void *abstract_surface, glPixelStorei (GL_PACK_ROW_LENGTH, image->stride / cpp); if (invert) glPixelStorei (GL_PACK_INVERT_MESA, 1); - glReadPixels (extents->x, extents->y, + + y = extents->y; + if (! _cairo_gl_surface_is_texture (surface)) + y = surface->height - extents->y - extents->height; + + glReadPixels (extents->x, y, extents->width, extents->height, format, type, image->data); if (invert)