summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2018-12-12 09:23:23 +0100
committerTimm Bäder <mail@baedert.org>2019-02-14 06:57:23 +0100
commitfcfab338ecf49acd9671ea954cc2a516f1cbb74b (patch)
tree48ff4493f3bdbf417954ce4c1cf4d4e41e856203
parentcdbb8d1e0f26edfc60313ae62656761d87f3ba2a (diff)
downloadgtk+-fcfab338ecf49acd9671ea954cc2a516f1cbb74b.tar.gz
gl renderer: Flip the framebuffer when dumping it
-rw-r--r--gsk/gl/gskglrenderer.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index ef2bc59641..4046c399ab 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -134,16 +134,27 @@ print_render_node_tree (GskRenderNode *root, int level)
static void G_GNUC_UNUSED
dump_framebuffer (const char *filename, int w, int h)
{
- int stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, w);
+ const int stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, w);
guchar *data = g_malloc (h * stride);
+ guchar *flipped = g_malloc (h * stride);
cairo_surface_t *s;
+ int i;
glReadPixels (0, 0, w, h, GL_BGRA, GL_UNSIGNED_BYTE, data);
- s = cairo_image_surface_create_for_data (data, CAIRO_FORMAT_ARGB32, w, h, stride);
+ for (i = 0; i < h; i ++)
+ {
+ memcpy (flipped + (stride * i),
+ data + ((h - 1 - i) * stride),
+ stride);
+
+ }
+ g_free (data);
+
+ s = cairo_image_surface_create_for_data (flipped, CAIRO_FORMAT_ARGB32, w, h, stride);
cairo_surface_write_to_png (s, filename);
cairo_surface_destroy (s);
- g_free (data);
+ g_free (flipped);
}
static gboolean