diff options
author | Timm Bäder <mail@baedert.org> | 2018-12-05 10:37:02 +0100 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2018-12-07 16:36:10 +0100 |
commit | 57efdcfbbef4fb63aba0f8c829733d40f3c5ea5b (patch) | |
tree | a8baa886cf7dc6ef1a336775856a66b2f6c821a3 | |
parent | df817bd118cf3f51b154564a22fdeb91ba8120e9 (diff) | |
download | gtk+-57efdcfbbef4fb63aba0f8c829733d40f3c5ea5b.tar.gz |
gl renderer: Ignore subsequent render target ops
-rw-r--r-- | gsk/gl/gskglrenderops.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/gsk/gl/gskglrenderops.c b/gsk/gl/gskglrenderops.c index dc85c2e8f5..9b2e299ebe 100644 --- a/gsk/gl/gskglrenderops.c +++ b/gsk/gl/gskglrenderops.c @@ -426,9 +426,28 @@ ops_set_render_target (RenderOpBuilder *builder, return render_target_id; prev_render_target = builder->current_render_target; - op.op = OP_CHANGE_RENDER_TARGET; - op.render_target_id = render_target_id; - g_array_append_val (builder->render_ops, op); + + if (builder->render_ops->len > 0) + { + RenderOp *last_op = &g_array_index (builder->render_ops, RenderOp, builder->render_ops->len - 1); + if (last_op->op == OP_CHANGE_RENDER_TARGET) + { + last_op->render_target_id = render_target_id; + } + else + { + op.op = OP_CHANGE_RENDER_TARGET; + op.render_target_id = render_target_id; + g_array_append_val (builder->render_ops, op); + } + } + else + { + op.op = OP_CHANGE_RENDER_TARGET; + op.render_target_id = render_target_id; + g_array_append_val (builder->render_ops, op); + } + builder->current_render_target = render_target_id; return prev_render_target; |