[cairo] [Bisected] Bugs in cairo's "contour" stroking
Carl Worth
cworth at cworth.org
Sat Jun 23 10:50:40 PDT 2012
A cairo user recently reported to me that cairo is not robust when
stroking wide splines with tight curvature, (and showed me a rather
striking example).
Compare these two images (the first rendered with cairo 1.10, the second
rendered with cairo master) rendered with the attached demo program.
http://cworth.org/~cworth/tmp/spline-cairo-1.10.png
http://cworth.org/~cworth/tmp/spline-cairo-1.12.2-97-g185a351.png
I was quite surprised since the original spline stroking algorithm was
designed to be particularly robust in cases like this. Git bisect was
kind enough to identify the recent "contour" stroker as the source of
the bug. It points to this commit as the commit that introduces the bug:
commit 545f30856aac98199a49cf66c72dbcb66c1f3a4f
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Aug 15 09:44:03 2011 +0100
stroke: Convert the outlines into contour and then into a polygon
In step 1 of speeding up stroking, we introduce contours as a means for
tracking the connected edges around the stroke. By keeping track of
these chains, we can analyse the edges as we proceed and eliminate
redundant vertices speeding up rasterisation.
Coincidentally fixes line-width-tolerance (looks like a combination of
using spline tangent vectors and tolerance).
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
I would really like to see this bug fixed. I have not yet had a chance
to dive into the new code. But the new code should be able to maintain
the same approach as the old algorithm, (namely, the final contour
should be constructed from translated pieces of the pen or translated
pieces of the path).
The attached code should provide a reasonable test case to be added to
the test suite. I've also (long ago) written an interactive program
which makes it easy to explore "difficult" splines like the one seen
here. That program is available here:
git clone git://git.cworth.org/git/cairo-spline
Chris, I'll look forward to your thoughts.
-Carl
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cairo-spline-image.c
Type: text/x-csrc
Size: 2546 bytes
Desc: not available
URL: <http://lists.cairographics.org/archives/cairo/attachments/20120623/09effeee/attachment.c>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://lists.cairographics.org/archives/cairo/attachments/20120623/09effeee/attachment.pgp>
More information about the cairo
mailing list