From: Matthias Clasen Date: Thu, 9 Mar 2023 11:35:07 +0000 (+0000) Subject: gsk: Cache scaled texture X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~5^2~25^2~3 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=0f0204029258f25c56bd9730e9ae31e24fe3a53b;p=gtk4.git gsk: Cache scaled texture Keep the texture we create for texture scale nodes. Fixes: #5642 --- 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,