polygon-intersect: Remove surplus edge direction

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2011-09-26 13:25:58 +01:00
parent 1a1b39a9c3
commit 9fe7022790

View file

@ -59,7 +59,6 @@ typedef struct _cairo_bo_edge cairo_bo_edge_t;
typedef struct _cairo_bo_deferred {
cairo_bo_edge_t *other;
int32_t top;
int dir;
} cairo_bo_deferred_t;
struct _cairo_bo_edge {
@ -1157,41 +1156,30 @@ edges_end (cairo_bo_edge_t *left,
{
cairo_bo_deferred_t *l = &left->deferred;
cairo_bo_edge_t *right = l->other;
cairo_bo_deferred_t *r = &right->deferred;
assert(right->deferred.other == NULL);
if (likely (l->top < bot)) {
_cairo_polygon_add_line (polygon, &left->edge.line,
l->top, bot, l->dir);
_cairo_polygon_add_line (polygon, &right->edge.line,
l->top, bot, r->dir);
_cairo_polygon_add_line (polygon, &left->edge.line, l->top, bot, 1);
_cairo_polygon_add_line (polygon, &right->edge.line, l->top, bot, -1);
}
l->other = NULL;
r->other = NULL;
}
static inline void
edges_start_or_continue (cairo_bo_edge_t *left,
cairo_bo_edge_t *right,
int top,
cairo_polygon_t *polygon)
{
if (left->deferred.other == right) {
assert (right->deferred.other == left);
assert (left->deferred.dir == 1);
assert (right->deferred.dir == -1);
if (left->deferred.other == right)
return;
}
if (left->deferred.other != NULL) {
assert (left->deferred.dir == 1);
if (right != NULL && edges_colinear (left->deferred.other, right)) {
/* continuation on right, so just swap edges */
left->deferred.other->deferred.other = NULL;
assert (left->deferred.other->deferred.other == NULL);
left->deferred.other = right;
right->deferred.other = left;
right->deferred.dir = -1;
return;
}
@ -1200,12 +1188,7 @@ edges_start_or_continue (cairo_bo_edge_t *left,
if (right != NULL && ! edges_colinear (left, right)) {
left->deferred.top = top;
left->deferred.dir = 1;
left->deferred.other = right;
right->deferred.top = top;
right->deferred.dir = -1;
right->deferred.other = left;
}
}
@ -1260,7 +1243,6 @@ active_edges (cairo_bo_edge_t *left,
}
}
static cairo_status_t
intersection_sweep (cairo_bo_event_t **start_events,
int num_events,