I thought pixman allowed you to choose between premultiplied and not premultiplied but I checked and apparently not. I think I'm getting my libraries mixed up. The problem I have with premultiplied alpha is that you lose precision when you have to un-premultiply. That's something I need in my application. I want to get the color of a pixel without losing precision with semi-transparent pixels.
So if I don't want to lose precision, I'll have to store images in regular alpha and then multiply the alpha every time I want to composite. That's kind of annoying. To render a polygon, I could divide it into triangles and render those with pixman. Thanks for your help. I think I'll explore other libraries. On Wed, 6 Feb 2019 at 20:24 Pekka Paalanen <[email protected]> wrote: > On Wed, 6 Feb 2019 19:25:48 +1030 > Indi Kernick <[email protected]> wrote: > > > The only problem I can find with Cairo is that it uses premultiplied > alpha. > > Pixman uses premultiplied alpha. Also Wayland uses premultiplied alpha > FWIW. I think you will find it quite common in general. > > > That's so annoying! Also, I'm not sure if the Cairo renderer is GPU or > CPU > > based. > > You choose through the API which one you use. Use the image API, and > you get CPU rendering. > > > I'm using Qt to render the images. Qt can render surfaces so I can use > > pixman to manipulate a surface and then Qt to upload it to the GPU when > > it's time to render. Cairo can do the same thing but then I have to worry > > about premultiplied alpha. I could use pixman to do the compositing and > > Cairo to do other stuff but that's just a mess. > > > > I'm guessing that using a GPU backend for Cairo and then making it play > > nice with the Qt layout engine will be a nightmare. If I have to go back > > and forth between CPU and GPU, it might actually be faster to use CPU > > rendering. The only thing I'm worried about is compositing. Compositing > is > > much faster on the GPU (I presume) but if I use Cairo, I'll have to > fiddle > > around with the alpha channel. That means a round trip between CPU and > GPU > > memory. > > You don't need to fiddle with alpha. Just write your fragment shaders > and blending state to expect it. > > The point of using premultiplied alpha is to pre-compute values you > would be computing in any case during blending. > > > I only really need non-antialiased circle rendering (antialiasing is a > > nice-to-have). I can figure out to do that myself (Bresenham comes to > > mind). I think I'll use pixman and do everything on the CPU. > > > > Another question: can pixman render a filled polygon without > antialiasing? > > If not, I might have to do that myself too. 😢 > > That I don't know. I have never used Pixman beyond > pixman_image_composite32(). I am guessing the trapezoids or triangles > API could be used, but there does not seem to be anything about polygons > per se. You can see the header yourself, that is all the documentation > there is, which is practically none. Cairo at least has documentation. > > I believe there are also other CPU rendering libraries, but I wouldn't > know to point to them. > > > Thanks, > pq >
_______________________________________________ Pixman mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/pixman
