gsk: Support straight alpha textures
authorMatthias Clasen <mclasen@redhat.com>
Wed, 31 May 2023 18:33:52 +0000 (14:33 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 31 May 2023 18:37:33 +0000 (14:37 -0400)
This is not the optimal way of doing it: we're
reuploading the texture with client-side conversion.
But it fits nicely into our current handling of mipmaps.

We can do better once we use shaders for colorspace
conversions.

gsk/gl/gskgldriver.c

index dec77c947ac868142165b20cf0b62aad62cc24f6..cc27a89ef6d9aa2d0f994e0be3c9b6f7e93d38f1 100644 (file)
@@ -761,7 +761,8 @@ gsk_gl_driver_load_texture (GskGLDriver *self,
       GdkGLContext *texture_context = gdk_gl_texture_get_context (gl_texture);
 
       if (gdk_gl_context_is_shared (context, texture_context) &&
-          (!ensure_mipmap || gdk_gl_texture_has_mipmap (gl_texture)))
+          (!ensure_mipmap || gdk_gl_texture_has_mipmap (gl_texture)) &&
+          gdk_memory_format_alpha (gdk_texture_get_format (texture)) != GDK_MEMORY_ALPHA_STRAIGHT)
         {
           /* A GL texture from the same GL context is a simple task... */
           return gdk_gl_texture_get_id (gl_texture);