From f56328a6cc3cb1f2fb8a2692eedc6dd0db4f44c8 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 30 Apr 2023 20:40:00 -0400 Subject: [PATCH] gsk: Fix mask transform handling We must reset the modelview transform when offscreen, or else we end up applying it twice. --- gsk/gl/gskglrenderjob.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gsk/gl/gskglrenderjob.c b/gsk/gl/gskglrenderjob.c index 061265780f..df19d98209 100644 --- a/gsk/gl/gskglrenderjob.c +++ b/gsk/gl/gskglrenderjob.c @@ -3391,11 +3391,14 @@ gsk_gl_render_job_visit_mask_node (GskGLRenderJob *job, mask_offscreen.reset_clip = TRUE; mask_offscreen.do_not_cache = TRUE; + gsk_gl_render_job_set_modelview (job, NULL); + /* TODO: We create 2 textures here as big as the mask node, but both * nodes might be a lot smaller than that. */ if (!gsk_gl_render_job_visit_node_with_offscreen (job, source, &source_offscreen)) { + gsk_gl_render_job_pop_modelview (job); gsk_gl_render_job_visit_node (job, source); return; } @@ -3404,11 +3407,14 @@ gsk_gl_render_job_visit_mask_node (GskGLRenderJob *job, if (!gsk_gl_render_job_visit_node_with_offscreen (job, mask, &mask_offscreen)) { + gsk_gl_render_job_pop_modelview (job); return; } g_assert (mask_offscreen.was_offscreen); + gsk_gl_render_job_pop_modelview (job); + gsk_gl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, mask)); gsk_gl_program_set_uniform_texture (job->current_program, UNIFORM_SHARED_SOURCE, 0, -- 2.30.2