Skip to content

[RFC] vulkan: compensate alpha to better match perceptual blend intent

John Lindgren requested to merge jlindgren90/wlroots:vulkan-alpha-blend into master

The Vulkan renderer performs alpha blending in linear RGB space, which preserves hue better than blending sRGB-encoded values directly (as the gles and pixman renderers do), but unfortunately tends to give a too-bright result when blending dark and light colors.

(In desktop usage, this especially affects dark, semi-transparent tooltips, which appear significantly more transparent than expected, affecting readability if light text underneath shows through.)

This is a novel (I think) approach to compensating for this effect by adjusting the alpha value of the source texture - basically the result is that dark semi-transparent pixels are made a little more opaque, while light semi-transparent pixels are made a little more transparent. Alpha values of 0 and 1 are unchanged.

I am somewhat new to science of color blending (Björn Ottosson's page, "How software gets color wrong" is very enlightening) but I think this approach makes at least a little bit of sense theoretically, and the result seems to me subjectively to be an improvement.

Analysis from an expert on the subject would be greatly appreciated.

Merge request reports

Loading