summaryrefslogtreecommitdiff
path: root/gdk/gdkgl.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/gdkgl.c')
-rw-r--r--gdk/gdkgl.c13
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);