summaryrefslogtreecommitdiff
path: root/gsk
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-04-30 20:21:47 -0400
committerMatthias Clasen <mclasen@redhat.com>2023-05-01 13:44:55 -0400
commit4214067d52a63506fdc1bceb901e9ed659ae4cb5 (patch)
treeda795686ba8a3294f39fddeefdcf22190f937d28 /gsk
parentd9a2b74b4a16c0dbe70a71d1c84d4f08de20f3a3 (diff)
downloadgtk+-4214067d52a63506fdc1bceb901e9ed659ae4cb5.tar.gz
gsk: Fix cross-fade transform handling
We must reset the modelview transform when rendering offscreen, or else we end up applying it twice.
Diffstat (limited to 'gsk')
-rw-r--r--gsk/gl/gskglrenderjob.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/gsk/gl/gskglrenderjob.c b/gsk/gl/gskglrenderjob.c
index 01fa435413..fcd140501f 100644
--- a/gsk/gl/gskglrenderjob.c
+++ b/gsk/gl/gskglrenderjob.c
@@ -2903,8 +2903,12 @@ gsk_gl_render_job_visit_cross_fade_node (GskGLRenderJob *job,
offscreen_end.reset_clip = TRUE;
offscreen_end.bounds = &node->bounds;
+ gsk_gl_render_job_set_modelview (job, NULL);
+
if (!gsk_gl_render_job_visit_node_with_offscreen (job, start_node, &offscreen_start))
{
+ gsk_gl_render_job_pop_modelview (job);
+
gsk_gl_render_job_visit_node (job, end_node);
return;
}
@@ -2913,12 +2917,18 @@ gsk_gl_render_job_visit_cross_fade_node (GskGLRenderJob *job,
if (!gsk_gl_render_job_visit_node_with_offscreen (job, end_node, &offscreen_end))
{
- float prev_alpha = gsk_gl_render_job_set_alpha (job, job->alpha * progress);
+ float prev_alpha;
+
+ gsk_gl_render_job_pop_modelview (job);
+
+ prev_alpha = gsk_gl_render_job_set_alpha (job, job->alpha * progress);
gsk_gl_render_job_visit_node (job, start_node);
gsk_gl_render_job_set_alpha (job, prev_alpha);
return;
}
+ gsk_gl_render_job_pop_modelview (job);
+
g_assert (offscreen_end.texture_id);
gsk_gl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, cross_fade));