Hi Laurent,

On 4/24/13 1:59 AM, Laurent Bourgès wrote:
    Originally the version that was used in embedded used RLE because it
    stored the results in the shape itself.  On desktop I never found
    that to be a necessary optimization especially because it actually
    wastes memory for no gain during animations, but that was why they
    used RLE as a storage format.  Would it speed up the code to use a
    different storage format?


Maybe it could be a very good idea: compressing alpha array to RLE and
then decompressing it to fill byte[] tile array seems a bad idea.
However, keeping RLE encoding may help having smaller arrays to store a
complete tile line as I want: width = 4096 (or more) x height = 32.

Or storing the crossings more directly. It's a little obtuse to go from crossings to a 1D linear array of alpha deltas to RLE alphas to alphas. For one thing, the crossings were sort of compact and then they got flattened into the deltas and then the RLE part has to do a linear search to compute the run lengths. It would seem that it would be smaller and faster to do a more direct "crossing to RLE" step or just storing the crossings themselves (which are very analogous to RLE anyway), and then generating the tile directly from the packed stored crossings.

    Also, in the version we use in JavaFX we removed the tiling
    altogether and return one alpha array for the entire rasterization.
      We might consider doing that for this code as well if it allows us
    to get rid of Ductus - it was a Ductus design constraint that forced
    the tiling (it was again based on the expected size of the hardware
    AA engine)...


I think tiling is still interesting as such small arrays stay in the cpu
cache ! however, I could try tuning the tile width to be larger (256x32)
instead of (32x32 tiles) ...

An issue with that is that there are some hard-coded pieces of the HW rasterizers that expect a 32x32 tile and would need to be rewritten to adjust to different tile sizes. Once they are fixed then it might make sense to generate tiles by multiples of scanlines and dynamically determine the horizontal size on the fly depending on the shape being rasterized. If you rasterize a shape that is 260 pixels wide then your 256x32 tile would involve way more up-and-down in the pipeline than a 512x16. It might be better to have a 4K tile and then have the dimensions be W x (4K/W) and have the rendering loops allow an arbitrary tile size...

Finally,
Who could help me working on pisces ? Could we form a tiger team ?
or at least could denis and you have some time to help me ?

It would be great to have a tiger team, but I'm not full-time on Java2D any more and Denis was only working on it during an internship so I'm not sure what he is up to now.

We have a "graphics-rasterizer" mailing list/project that was created to come up with an OS alternative to Ductus for OpenJDK. It went silent when we got the first version of Pisces in and so that project has technically been finished. If we can get a group of more than, well, you working and me tossing out suggestions then we can discuss if we want to revive that group or just continue on here...

                        ...jim

Reply via email to