> I'm writing a geometry app for windows mobile and I wanted to optimize some > cpu intensive operations. My phone is HTC HD2 and it supports neon (I already > use some neon code with it). I tried to search for some example code or for > neon optimized if there is any and it seem that pixman may have that > functionality. > > 1) I do argb alpha blending from 32bit src image to 32/24 or rbg565 surface. > I downloaded pixman and after digging through test code I was able to get > that part working: pixman_image_composite(PIXMAN_OP_OVER, alpha_img, NULL, > dest_img, ...); I tried 32-bit destination argb and it works (I didn't try > 24bit or rbg565 as destination images, but I assume they work the same way, > as there are neon optimized paths for these operations in pixman-arm-neon.c) > > 2) I do simple overlays with arbitrary shapes. For example, I have 200x200 > pix image (rbg565 or 24bit rgb) and I have a triangle defined by some > arbitrary vertices. I do solid fill of that triangle or I also do 40% alpha > blending of that triangle (60% from the src image and the rest 40% of some > solid color). > I tried to find how to do that kind of tasks with pixman, but I couldn't find > how to do it. In real application I actually need to draw lines and > solid-fill or do 40% blending of arbitrary shapes. It looks like some > arbitrary shaped fills can be done with pixman_add_traps ( after I viewed > test\trap-test.c ), but for that I need t generate alpha plane, and I didn't > see how set arbitrary shaped trap and then do pixman_image_composite so that > only some part of the image had composited pixels. To tell the trues, it's > really not clear to me what trap means and what it does in pixman.
"Trap" is simply short for "trapezoid". The idea is that you make an A8-format image using the trapezoid rasteriser to define your shape, and then supply the A8 image as a mask to your composite operation. > 3) I had a big problem with zooming. I optimized that part a bit, but it > seems that such part could be done better with pixman. In short, I want to > stretch from 200x200 to 250x250 some arbitrary image 32/24bit or rgb565. As > far as I understood from studying test code, that kind stuff is possible > through some sort of transformations, and there is no straight forward scale > function. Yes, the transform is the correct mechanism. There are functions to help set up a transform using familiar "scale", "translate", "rotate" etc. building blocks. > Currently, I have code that does what I described (using winapi or even plain > c code that does alpha blending). So, I'd like to find out how to do such > relatively simple tasks with pixman. There seems to be no docs/tutorials on > how to use pixman directly. This is all considerably simplified by using Cairo as a front-end. Pixman is not really designed to be used directly by applications, though of course it can be if you really want to. - Jonathan Morton _______________________________________________ Pixman mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/pixman
