summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2018-12-02 08:12:09 +0100
committerTimm Bäder <mail@baedert.org>2018-12-02 13:25:43 +0100
commit74dd05b45e0730bace32c7d6c57768ae9bbac29f (patch)
tree1b237b8af22769e6772b86c77c7feb2dce5c0e54
parent3eb2cef4214afc93493cbb275467681ef622d5a3 (diff)
downloadgtk+-74dd05b45e0730bace32c7d6c57768ae9bbac29f.tar.gz
gl renderer: add render ops for dumping the framebuffer
So offscreen rendering can be properly debugged.
-rw-r--r--gsk/gl/gskglrenderer.c4
-rw-r--r--gsk/gl/gskglrenderops.c17
-rw-r--r--gsk/gl/gskglrenderopsprivate.h10
3 files changed, 31 insertions, 0 deletions
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index b7c7ebdc7d..89be24fadc 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -2562,6 +2562,10 @@ gsk_gl_renderer_render_ops (GskGLRenderer *self,
glDrawArrays (GL_TRIANGLES, op->draw.vao_offset, op->draw.vao_size);
break;
+ case OP_DUMP_FRAMEBUFFER:
+ dump_framebuffer (op->dump.filename, op->dump.width, op->dump.height);
+ break;
+
default:
g_warn_if_reached ();
}
diff --git a/gsk/gl/gskglrenderops.c b/gsk/gl/gskglrenderops.c
index 21dbb59029..c391578567 100644
--- a/gsk/gl/gskglrenderops.c
+++ b/gsk/gl/gskglrenderops.c
@@ -17,6 +17,23 @@ rgba_to_float (const GdkRGBA *c,
f[3] = c->alpha;
}
+/* Debugging only! */
+void
+ops_dump_framebuffer (RenderOpBuilder *builder,
+ const char *filename,
+ int width,
+ int height)
+{
+ RenderOp op;
+
+ op.op = OP_DUMP_FRAMEBUFFER;
+ op.dump.filename = g_strdup (filename);
+ op.dump.width = width;
+ op.dump.height = height;
+
+ g_array_append_val (builder->render_ops, op);
+}
+
float
ops_get_scale (const RenderOpBuilder *builder)
{
diff --git a/gsk/gl/gskglrenderopsprivate.h b/gsk/gl/gskglrenderopsprivate.h
index 97ce3a28b1..38b66744e4 100644
--- a/gsk/gl/gskglrenderopsprivate.h
+++ b/gsk/gl/gskglrenderopsprivate.h
@@ -54,6 +54,7 @@ enum {
OP_CHANGE_UNBLURRED_OUTSET_SHADOW = 19,
OP_CLEAR = 20,
OP_DRAW = 21,
+ OP_DUMP_FRAMEBUFFER = 22,
};
typedef struct
@@ -207,6 +208,11 @@ typedef struct
float progress;
int source2;
} cross_fade;
+ struct {
+ char *filename;
+ int width;
+ int height;
+ } dump;
};
} RenderOp;
@@ -258,6 +264,10 @@ typedef struct
} RenderOpBuilder;
+void ops_dump_framebuffer (RenderOpBuilder *builder,
+ const char *filename,
+ int width,
+ int height);
void ops_finish (RenderOpBuilder *builder);
void ops_push_modelview (RenderOpBuilder *builder,