From: Matthias Clasen Date: Mon, 1 May 2023 00:21:47 +0000 (-0400) Subject: gsk: Fix cross-fade transform handling X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~323^2~10 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=4214067d52a63506fdc1bceb901e9ed659ae4cb5;p=gtk4.git gsk: Fix cross-fade transform handling We must reset the modelview transform when rendering offscreen, or else we end up applying it twice. --- 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));