Avoid memory copies in the texture upload path
Currently, the bulk of our GdkTextures are in the GDK_MEMORY_GDK_PIXBUF_ALPHA format (ie unpremultiplied).
All the shaders currently assume texture data to be in the CAIRO_ARGB32 format (ie premultiplied).
For this reason, we currently always go
GdkTexture --(gdk_texture_download)-> cairo surface --(gdk_cairo_surface_upload_to_gl)-> GPU
It would be nice to avoid the copy+conversion step.
As long as GdkPixbuf is our one and only means of loading image data, we will not get away from unpremultiplied data (although we could do the conversion once, on the assumption that the GdkTexture object is kept for a longer time than the GL texture).
Instead, we could have a 'premultiply' shader, and teach the GL renderer to use that when we have such data (but that requires us to track texture formats in the renderer, which we currently don't.