[cairo] cairo-1.10 regression?

Andrea Canciani ranma42 at gmail.com
Sat Nov 27 02:42:35 PST 2010


On Fri, Nov 26, 2010 at 4:11 PM, Julien Bramary <julien_bramary at msn.com> wrote:
> Hey guys,
> I tried 1.10 today and found some odd glitches in my application. I narrowed
> it down to a vertical and horizontal line crossing showing
> strange artefacts.
> The concerned lines either have a non-integer width or non-integer starting
> and end points.
> Here is the code snippet I used to test this (the code before that paints
> the background to white):
> layer_0 = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 600, 600);
> cairo_t *cr = cairo_create (layer_0);
> cairo_set_source_rgb (cr, 1, 1, 1);
> cairo_paint (cr);
> double x = 50.323;
> double y = 50.768;
> cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
> cairo_set_source_rgb (cr, 0.1f, 0.1f, 0.1f);
> cairo_set_line_width (cr, 6);
> cairo_move_to (cr, x, 0);
> cairo_line_to (cr, x, 600);
> cairo_move_to (cr, 0, y);
> cairo_line_to (cr, 600, y);
> cairo_stroke (cr);
> The screenshots attached clearly show that 1.8.10 is doing the right thing
> with the semi-transparent bits whereas 1.10.0 is not.
> Anyone seen this with 1.10? I couldn't find related bugs in the tracker. I
> just tried with latest Git version and it still happens.

I can confirm the problem. It is caused by a bug in the implementation of the
rectilinear rasterizer.

A temporary workaround might be to avoid the rectilinear rasterizer, for
example by adding a degenerate curve:

cairo_rel_curve_to (cr, 0, 0, 0, 0, 0, 0);

right before stroking.

I'm working on fixing the implementation, but it will probably require some
nontrivial changes to the rectilinear rasterizer.

Andrea


More information about the cairo mailing list