[cairo-commit] src/cairo-gl-surface.c

Chris Wilson ickle at kemper.freedesktop.org
Thu Mar 29 07:07:02 PDT 2012


 src/cairo-gl-surface.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

New commits:
commit a965b0f95fdeb567f7ccb51f7c8c47735a61e2d9
Author: Henry (Yu) Song <hsong at sisa.samsung.com>
Date:   Thu Mar 29 01:08:51 2012 +0000

    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.

diff --git a/src/cairo-gl-surface.c b/src/cairo-gl-surface.c
index 8bbf939..32ecf63 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)


More information about the cairo-commit mailing list