From 0f0204029258f25c56bd9730e9ae31e24fe3a53b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 9 Mar 2023 11:35:07 +0000 Subject: [PATCH] gsk: Cache scaled texture Keep the texture we create for texture scale nodes. Fixes: #5642 --- gsk/gl/gskglrenderjob.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gsk/gl/gskglrenderjob.c b/gsk/gl/gskglrenderjob.c index 1fcd13a1e2..433e38638c 100644 --- a/gsk/gl/gskglrenderjob.c +++ b/gsk/gl/gskglrenderjob.c @@ -3640,6 +3640,7 @@ gsk_gl_render_job_visit_texture_scale_node (GskGLRenderJob *job, guint prev_fbo; guint texture_id; float u0, u1, v0, v1; + GskTextureKey key; gsk_gl_render_job_untransform_bounds (job, &job->current_clip->rect.bounds, &clip_rect); if (!graphene_rect_intersection (bounds, &clip_rect, &clip_rect)) @@ -3652,6 +3653,17 @@ gsk_gl_render_job_visit_texture_scale_node (GskGLRenderJob *job, return; } + key.pointer = node; + key.pointer_is_child = TRUE; + key.parent_rect = clip_rect; + key.scale_x = 1.; + key.scale_y = 1.; + key.filter = min_filter; + + texture_id = gsk_gl_driver_lookup_texture (job->driver, &key); + if (texture_id != 0) + goto render_texture; + viewport = GRAPHENE_RECT_INIT (0, 0, clip_rect.size.width, clip_rect.size.height); @@ -3707,6 +3719,9 @@ gsk_gl_render_job_visit_texture_scale_node (GskGLRenderJob *job, texture_id = gsk_gl_driver_release_render_target (job->driver, render_target, FALSE); + gsk_gl_driver_cache_texture (job->driver, &key, texture_id); + +render_texture: gsk_gl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, blit)); gsk_gl_program_set_uniform_texture (job->current_program, UNIFORM_SHARED_SOURCE, 0, -- 2.30.2