mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-01-06 06:10:17 +01:00
Make miter join code use tessellate_convex_quad rather than tessellate_polygon
This provides an additional 22-29% speedup on top of the previous fix for stroking paths with many miter joins: image-rgba world_map-800 459.73 0.27% -> 356.80 0.32%: 1.29x speedup ▎ image-rgb world_map-800 458.83 0.37% -> 358.08 0.41%: 1.28x speedup ▎ xlib-rgba world_map-800 566.57 0.23% -> 463.84 0.31%: 1.22x speedup ▎ xlib-rgb world_map-800 562.31 0.64% -> 460.51 0.83%: 1.22x speedup ▎
This commit is contained in:
parent
3d53f623fa
commit
29b01f93ca
1 changed files with 7 additions and 13 deletions
|
|
@ -201,7 +201,6 @@ _cairo_stroker_face_clockwise (cairo_stroke_face_t *in, cairo_stroke_face_t *out
|
|||
static cairo_status_t
|
||||
_cairo_stroker_join (cairo_stroker_t *stroker, cairo_stroke_face_t *in, cairo_stroke_face_t *out)
|
||||
{
|
||||
cairo_status_t status;
|
||||
int clockwise = _cairo_stroker_face_clockwise (out, in);
|
||||
cairo_point_t *inpt, *outpt;
|
||||
|
||||
|
|
@ -296,8 +295,8 @@ _cairo_stroker_join (cairo_stroker_t *stroker, cairo_stroke_face_t *in, cairo_st
|
|||
double x1, y1, x2, y2;
|
||||
double mx, my;
|
||||
double dx1, dx2, dy1, dy2;
|
||||
cairo_polygon_t polygon;
|
||||
cairo_point_t outer;
|
||||
cairo_point_t quad[4];
|
||||
|
||||
/*
|
||||
* we've got the points already transformed to device
|
||||
|
|
@ -339,18 +338,13 @@ _cairo_stroker_join (cairo_stroker_t *stroker, cairo_stroke_face_t *in, cairo_st
|
|||
*/
|
||||
outer.x = _cairo_fixed_from_double (mx);
|
||||
outer.y = _cairo_fixed_from_double (my);
|
||||
_cairo_polygon_init (&polygon);
|
||||
_cairo_polygon_move_to (&polygon, &in->point);
|
||||
_cairo_polygon_line_to (&polygon, inpt);
|
||||
_cairo_polygon_line_to (&polygon, &outer);
|
||||
_cairo_polygon_line_to (&polygon, outpt);
|
||||
_cairo_polygon_close (&polygon);
|
||||
status = _cairo_traps_tessellate_polygon (stroker->traps,
|
||||
&polygon,
|
||||
CAIRO_FILL_RULE_WINDING);
|
||||
_cairo_polygon_fini (&polygon);
|
||||
|
||||
return status;
|
||||
quad[0] = in->point;
|
||||
quad[1] = *inpt;
|
||||
quad[2] = outer;
|
||||
quad[3] = *outpt;
|
||||
|
||||
return _cairo_traps_tessellate_convex_quad (stroker->traps, quad);
|
||||
}
|
||||
/* fall through ... */
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue