<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif">Hello,<br><br>I am currently working on a 3D graphics/GUI project utilizing Cairo and Pango, primarily for text rendering. However, I have run into an issue with how Cairo handles its image data, and wanted to make a feature request regarding that.<br><br>Currently, Cairo uses pre-multiplied alpha for CAIRO_FORMAT_ARGB32, which is the only format currently supported combining color and alpha data. I require the capability to have a full RGBA texel, but alpha pre-multiplication presents several major issues for my use, or indeed any use, of Cairo in 3D contexts:<br><ul><li>Most libraries, shaders, and users/programmers expect textures in 3D contexts to be non-pre-multiplied. My system is no different – for various reasons, I need to use standard independent alpha for textures not generated by Cairo. I cannot easily include special handling of Cairo textures to sidestep that as it would make texture handling needlessly complex. I don't want to have to know which library the texture came from in a GLSL shader.<br></li></ul><ul><li>Reversing pre-multiplication is fairly simple, but still requires special conversion functionality in my library.</li></ul><ul><li>Conversion of texels introduces unnecessary texture write latency, especially for large images.</li></ul><ul><li>Most importantly, the dynamic range of the color is effectively reduced to 256*(1-alpha%) values, even on back-converted texels. For nearly transparent textures, this is especially problematic.</li><ul><li>A texel with independent alpha has 256 discrete values (counting zero) per channel no matter its alpha</li><li>A pre-multiplied alpha texel with 50% opacity only supports 128 discrete values per channel rounding issues make that even worse.</li><li>Going down to 12.5% opacity, only 32 values are possible per channel.</li><li>All this makes grayscale images that might have low opacity, which I expect I will use Pango-Cairo for fairly often, extremely poor quality.<br></li></ul></ul>As such, I would like to make a feature request that Cairo implement one of the following:<br><ul><li>The option to turn off pre-multiplied alpha in the existing CAIRO_FORMAT_ARGB32 format, without alpha reducing the range of possible values in the format.</li></ul><ul><li>A floating point image format, which would ease back-conversion of the pre-multiplication and eliminate most of the dynamic range issues.</li></ul><ul><li>An extended size integer format, such as 32 bits per channel ARGB / 128 total, which would eliminate the dynamic range issues.</li></ul>I’d prefer the options in that order, with the simple ability to turn off premult the best from where I stand, but any would solve my problem and I would be extremely appreciative if any could be implemented.<br><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">Thank you in advance for any assistance you might offer. If desired I can help implement this change, but I have no prior experience with the internals of Cairo, only experience with my usage of it thus far.<br clear="all"></div><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><font size="1"><span style="font-family:trebuchet ms,sans-serif"><br>:-:-:-</span></font><span style="color:rgb(68,68,68)"><font size="1"><span style="font-family:trebuchet ms,sans-serif">:-:-:-</span></font></span><span style="color:rgb(102,102,102)"><font size="1"><span style="font-family:trebuchet ms,sans-serif">:-:-:-</span></font></span><span style="color:rgb(153,153,153)"><font size="1"><span style="font-family:trebuchet ms,sans-serif">:-:-:-</span></font></span><span style="color:rgb(204,204,204)"><font size="1"><span style="font-family:trebuchet ms,sans-serif">:-:-:-</span></font></span><span style="color:rgb(238,238,238)"><font size="1"><span style="font-family:trebuchet ms,sans-serif">:-:-:-</span></font></span><span style="color:rgb(243,243,243)"><font size="1"><span style="font-family:trebuchet ms,sans-serif">:-:-:-</span></font></span><br><span style="font-family:verdana,sans-serif">William E. Kappler II<br><font size="1"><a href="https://www.linkedin.com/in/williamkappler" target="_blank">LinkedIn</a> · <a href="http://williamkappler.blogspot.com/" target="_blank">Blog</a> · <a href="https://github.com/WilliamKappler/onathacar/wiki" target="_blank">Project Website</a></font></span></div></div></div></div></div></div></div>
</div>