[OpenJDK 2D-Dev] X11 uniform scaled wide lines and dashed lines; STROKE_CONTROL in Pisces
Denis Lila
dlila at redhat.com
Wed Nov 10 21:55:17 UTC 2010
Hi Jim.
> Did you have to modify the AFD code for this (in terms of changing
> their limit constants to get good results)?
No, I didn't. By handling non monotonic curves, the AFD algorithm
is going through more iterations, but the only way in which this
could be a problem is through accumulation of numerical inaccuracies,
and I don't think we do enough iterations for this to start causing
perceptible problems. I haven't noticed anything in all my testing.
Regards,
Denis.
----- "Jim Graham" <james.graham at oracle.com> wrote:
> Hi Denis,
>
> On 11/9/2010 3:06 PM, Denis Lila wrote:
> > I see. In that case, I think it's a good idea if we don't make
> curves
> > "monotonic". I already did this, by moving the edgeMin/axX/Y
> handling
> > and orientation computations in addLine. This did make it slower
> compared
> > to the file you sent me, but only by very, very little. Curves were
> > affected the most, and they were only 1% slower. I think we can
> handle
> > this, especially since lines were about 1% faster. The code is also
> 70
> > lines shorter.
>
> > The edgeM* members are used only so we don't have to iterate through
> every
> > scanline if this is not necessary, and so that we can tell
> PiscesCache
> > that the bounding box is smaller than what Renderer is given.
> However, now
> > that we keep the bucket list, I think it would be more efficient if
> we
> > got rid if EdgeM[in|ax]Y and simply computed the y bounds by looking
> at the
> > head and tail of the bucket list.
>
> That makes sense. We calculate that per-edge anyway so the edgeMy
> constants are redundant.
>
> > Also, perhaps we can keep track of edgeM[in|ax]X using the bounding
> boxes
> > of curves, instead of the lines in the flattened curves. This would
> not
> > be accurate, but I don't think it would affect rendering. It would
> simply
> > result in a few more alpha boxes than necessary. I don't think these
> would
> > be too bad, because mostly they're just going to be all 0 so they
> will
> > be skipped because getTypicalAlpha() is now implemented.
> > How do you think we should handle these 4 variables?
>
> I think this is probably OK, but let me play with it a bit and see
> what
> I come up with. For one thing, the extra "slop" may not be large
> enough
> to trigger a full tile of 0's - there would have to be 32-pixel
> borders
> for that to happen.
>
> If we get rid of the redundant edgeMy calculations then we might be
> able
> to do edgeMx calculations on each edge without losing any
> performance...
>
> ...jim
More information about the 2d-dev
mailing list