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.
This commit is contained in:
Henry (Yu) Song 2012-03-29 01:08:51 +00:00 committed by Chris Wilson
parent af6e084dd7
commit a965b0f95f

View file

@ -985,6 +985,7 @@ _cairo_gl_surface_map_to_image (void *abstract_surface,
unsigned int cpp; unsigned int cpp;
cairo_bool_t invert; cairo_bool_t invert;
cairo_status_t status; cairo_status_t status;
int y;
/* Want to use a switch statement here but the compiler gets whiny. */ /* Want to use a switch statement here but the compiler gets whiny. */
if (surface->base.content == CAIRO_CONTENT_COLOR_ALPHA) { 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); glPixelStorei (GL_PACK_ROW_LENGTH, image->stride / cpp);
if (invert) if (invert)
glPixelStorei (GL_PACK_INVERT_MESA, 1); 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, extents->width, extents->height,
format, type, image->data); format, type, image->data);
if (invert) if (invert)