diff options
author | Timm Bäder <mail@baedert.org> | 2018-12-12 09:23:23 +0100 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2019-02-14 06:57:23 +0100 |
commit | fcfab338ecf49acd9671ea954cc2a516f1cbb74b (patch) | |
tree | 48ff4493f3bdbf417954ce4c1cf4d4e41e856203 | |
parent | cdbb8d1e0f26edfc60313ae62656761d87f3ba2a (diff) | |
download | gtk+-fcfab338ecf49acd9671ea954cc2a516f1cbb74b.tar.gz |
gl renderer: Flip the framebuffer when dumping it
-rw-r--r-- | gsk/gl/gskglrenderer.c | 17 |
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 |