gl: Pass filters down from visit_texture_node
authorMatthias Clasen <mclasen@redhat.com>
Wed, 8 Feb 2023 00:29:07 +0000 (19:29 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 11 Feb 2023 20:09:38 +0000 (15:09 -0500)
For now, we always pass GL_LINEAR.

gsk/gl/gskglrenderjob.c

index 103f40c02989e122a17cb8453dbd971b2ce8bf65..325278df8cdb98744f9d081c8390a3cdadb07444 100644 (file)
@@ -3443,9 +3443,13 @@ gsk_gl_render_job_visit_gl_shader_node (GskGLRenderJob      *job,
 static void
 gsk_gl_render_job_upload_texture (GskGLRenderJob       *job,
                                   GdkTexture           *texture,
+                                  int                   min_filter,
+                                  int                   mag_filter,
                                   GskGLRenderOffscreen *offscreen)
 {
-  if (gsk_gl_texture_library_can_cache ((GskGLTextureLibrary *)job->driver->icons_library,
+  if (min_filter == GL_LINEAR &&
+      mag_filter == GL_LINEAR &&
+      gsk_gl_texture_library_can_cache ((GskGLTextureLibrary *)job->driver->icons_library,
                                         texture->width,
                                         texture->height) &&
       !GDK_IS_GL_TEXTURE (texture))
@@ -3458,7 +3462,7 @@ gsk_gl_render_job_upload_texture (GskGLRenderJob       *job,
     }
   else
     {
-      offscreen->texture_id = gsk_gl_driver_load_texture (job->driver, texture, GL_LINEAR, GL_LINEAR);
+      offscreen->texture_id = gsk_gl_driver_load_texture (job->driver, texture, min_filter, mag_filter);
       init_full_texture_region (offscreen);
     }
 }
@@ -3468,6 +3472,8 @@ gsk_gl_render_job_visit_texture_node (GskGLRenderJob      *job,
                                       const GskRenderNode *node)
 {
   GdkTexture *texture = gsk_texture_node_get_texture (node);
+  int min_filter = GL_LINEAR;
+  int mag_filter = GL_LINEAR;
   int max_texture_size = job->command_queue->max_texture_size;
 
   if G_LIKELY (texture->width <= max_texture_size &&
@@ -3475,7 +3481,7 @@ gsk_gl_render_job_visit_texture_node (GskGLRenderJob      *job,
     {
       GskGLRenderOffscreen offscreen = {0};
 
-      gsk_gl_render_job_upload_texture (job, texture, &offscreen);
+      gsk_gl_render_job_upload_texture (job, texture, min_filter, mag_filter, &offscreen);
 
       g_assert (offscreen.texture_id);
       g_assert (offscreen.was_offscreen == FALSE);
@@ -3812,7 +3818,7 @@ gsk_gl_render_job_visit_node_with_offscreen (GskGLRenderJob       *job,
       offscreen->force_offscreen == FALSE)
     {
       GdkTexture *texture = gsk_texture_node_get_texture (node);
-      gsk_gl_render_job_upload_texture (job, texture, offscreen);
+      gsk_gl_render_job_upload_texture (job, texture, GL_LINEAR, GL_LINEAR, offscreen);
       g_assert (offscreen->was_offscreen == FALSE);
       return TRUE;
     }