diff options
Diffstat (limited to 'gdk/gdkgl.c')
-rw-r--r-- | gdk/gdkgl.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gdk/gdkgl.c b/gdk/gdkgl.c index 8e7b8c2310..933e204439 100644 --- a/gdk/gdkgl.c +++ b/gdk/gdkgl.c @@ -22,6 +22,10 @@ #include "gdkinternals.h" +#ifdef GDK_WINDOWING_WIN32 +# include "win32/gdkwin32.h" +#endif + #include <epoxy/gl.h> #include <math.h> #include <string.h> @@ -641,6 +645,13 @@ gdk_cairo_draw_from_gl (cairo_t *cr, { /* Software fallback */ int major, minor, version; + gboolean es_read_bgra = FALSE; + +#ifdef GDK_WINDOWING_WIN32 + /* on ANGLE GLES, we need to set the glReadPixel() format as GL_BGRA instead */ + if (GDK_WIN32_IS_GL_CONTEXT(paint_context)) + es_read_bgra = TRUE; +#endif gdk_gl_context_get_version (paint_context, &major, &minor); version = major * 100 + minor; @@ -683,7 +694,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr, glReadPixels (x, y, width, height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, cairo_image_surface_get_data (image)); else - glReadPixels (x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, + glReadPixels (x, y, width, height, es_read_bgra ? GL_BGRA : GL_RGBA, GL_UNSIGNED_BYTE, cairo_image_surface_get_data (image)); glPixelStorei (GL_PACK_ROW_LENGTH, 0); |