[cairo] Gradient mesh rasterizer
Bill Spitzak
spitzak at gmail.com
Thu Jul 30 10:49:42 PDT 2009
Adrian Johnson wrote:
> Andrea Canciani wrote:
>> On Mon, Jul 27, 2009 at 10:31 PM, Andrea Canciani<ranma42 at gmail.com> wrote:
>>> I updated my code to be pixel perfect when painting a square (the file
>>> pattern.c does exactly this: it paints a 768 x 768 square tile and
>>> reports for any incorrect pixel).
>>> I also have this code as a patch against the mesh branch.
>
> The mesh branch is at:
>
> http://cgit.freedesktop.org/~ajohnson/cairo/log/?h=mesh
>
> Currently the image, PDF, and PostScript backends are working. The new
> API is:
>
> cairo_pattern_t *
> cairo_pattern_create_mesh (void);
>
> void
> cairo_pattern_begin_patch (cairo_pattern_t *pattern);
>
> void
> cairo_pattern_end_patch (cairo_pattern_t *pattern);
>
> void
> cairo_pattern_curve_to (cairo_pattern_t *pattern,
> double x1,
> double y1,
> double x2,
> double y2,
> double x3,
> double y3);
>
> void
> cairo_pattern_line_to (cairo_pattern_t *pattern,
> double x,
> double y);
>
> void
> cairo_pattern_move_to (cairo_pattern_t *pattern,
> double x,
> double y);
>
> void
> cairo_pattern_add_control_point (cairo_pattern_t *pattern,
> double x,
> double y);
>
> Currently the the cairo_pattern_add_color_stop_rgb[a] functions are used
> for adding color stops. After each side of a patch is specified, using
> cairo_pattern_curve_to() or cairo_pattern_line_to(),
> cairo_pattern_add_color_stop_rgb[a] can be used to add one or more stops
> along the current side.
>
> However at present both the gradient rasterizer and the PDF/PS backends
> only allow color stops on the corners of the patch. Only the first stop
> specified for each side is used and is assumed to be at offset 0.
>
> I'm not sure if the API should be changed to allow only color stops on
> the corners, or if stops should be allowed anywhere on the sides and
> then subdivide the patch at the stops when rendering or embedding in PS/PDF.
Can the patch have any number of sides or is it required to have 4?
More information about the cairo
mailing list