Use additive blending to properly draw an alpha channel with premultiplied alpha
This changes the blend function to account for a pre-multiplied alpha channel into the colour. The effect is that the rendered image becomes darker, but the blend function renders the colour channels additively which then compensates for that.
See https://apoorvaj.io/alpha-compositing-opengl-blending-and-premultiplied-alpha/ for a theory behind this technique. It is a performant way of rendering a lot of translucent layers, but not entirely accurate where multiple layers with different translucency overlap.
The Python documentation says it only raises OSErrors, but in practice we've seen that it can also raise this struct.error because it's unpacking a struct internally and not catching that error properly.