From 552df197c4dcb9773f59f6103c22d2debb3ddd92 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 30 Apr 2023 20:27:38 -0400 Subject: [PATCH] gsk: Fix blend transform handling We must reset the modelview transform when rendering offscreen, or else we end up applying it twice. --- gsk/gl/gskglrenderjob.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gsk/gl/gskglrenderjob.c b/gsk/gl/gskglrenderjob.c index fcd140501f..061265780f 100644 --- a/gsk/gl/gskglrenderjob.c +++ b/gsk/gl/gskglrenderjob.c @@ -3322,10 +3322,14 @@ gsk_gl_render_job_visit_blend_node (GskGLRenderJob *job, bottom_offscreen.force_offscreen = TRUE; bottom_offscreen.reset_clip = TRUE; + gsk_gl_render_job_set_modelview (job, NULL); + /* TODO: We create 2 textures here as big as the blend node, but both the * start and the end node might be a lot smaller than that. */ if (!gsk_gl_render_job_visit_node_with_offscreen (job, bottom_child, &bottom_offscreen)) { + gsk_gl_render_job_pop_modelview (job); + gsk_gl_render_job_visit_node (job, top_child); return; } @@ -3334,6 +3338,8 @@ gsk_gl_render_job_visit_blend_node (GskGLRenderJob *job, if (!gsk_gl_render_job_visit_node_with_offscreen (job, top_child, &top_offscreen)) { + gsk_gl_render_job_pop_modelview (job); + gsk_gl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, blit)); gsk_gl_program_set_uniform_texture (job->current_program, UNIFORM_SHARED_SOURCE, 0, @@ -3347,6 +3353,8 @@ gsk_gl_render_job_visit_blend_node (GskGLRenderJob *job, g_assert (top_offscreen.was_offscreen); + gsk_gl_render_job_pop_modelview (job); + gsk_gl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, blend)); gsk_gl_program_set_uniform_texture (job->current_program, UNIFORM_SHARED_SOURCE, 0,