Lines Matching defs:polygon
158 /* A collection of sorted and vertically clipped edges of the polygon.
159 * Edges are moved from the polygon to an active list while scan
161 struct polygon {
166 * into bucket EDGE_BUCKET_INDEX(edge->ytop, polygon->ymin) when
167 * it is added to the polygon. */
176 /* A cell records the effect on pixel coverage of polygon edges
180 * Consider the effects of a polygon edge on the coverage of a pixel
212 * The heights and areas are signed, with left edges of the polygon
247 struct polygon polygon[1];
413 polygon_fini(struct polygon *polygon)
415 if (polygon->y_buckets != polygon->y_buckets_embedded)
416 free(polygon->y_buckets);
418 if (polygon->edges != polygon->edges_embedded)
419 free(polygon->edges);
423 polygon_init(struct polygon *polygon, int num_edges, int ymin, int ymax)
430 polygon->edges = polygon->edges_embedded;
431 polygon->y_buckets = polygon->y_buckets_embedded;
433 polygon->num_edges = 0;
434 if (num_edges > (int)ARRAY_SIZE(polygon->edges_embedded)) {
435 polygon->edges = malloc(sizeof(struct edge)*num_edges);
436 if (unlikely(NULL == polygon->edges))
440 if (num_buckets >= ARRAY_SIZE(polygon->y_buckets_embedded)) {
441 polygon->y_buckets = malloc((1+num_buckets)*sizeof(struct edge *));
442 if (unlikely(NULL == polygon->y_buckets))
445 memset(polygon->y_buckets, 0, num_buckets * sizeof(struct edge *));
446 polygon->y_buckets[num_buckets] = (void *)-1;
448 polygon->ymin = ymin;
449 polygon->ymax = ymax;
453 polygon_fini(polygon);
458 _polygon_insert_edge_into_its_y_bucket(struct polygon *polygon, struct edge *e)
460 unsigned ix = EDGE_Y_BUCKET_INDEX(e->ytop, polygon->ymin);
461 struct edge **ptail = &polygon->y_buckets[ix];
462 assert(e->ytop < polygon->ymax);
468 polygon_add_edge(struct polygon *polygon,
473 struct edge *e = &polygon->edges[polygon->num_edges];
482 if (ytop < polygon->ymin)
483 ytop = polygon->ymin;
486 if (ybot > polygon->ymax)
487 ybot = polygon->ymax;
540 _polygon_insert_edge_into_its_y_bucket(polygon, e);
541 polygon->num_edges++;
545 polygon_add_line(struct polygon *polygon,
550 struct edge *e = &polygon->edges[polygon->num_edges];
571 if (top < polygon->ymin)
572 top = polygon->ymin;
575 if (bot > polygon->ymax)
576 bot = polygon->ymax;
625 if (polygon->num_edges > 0) {
626 struct edge *prev = &polygon->edges[polygon->num_edges-1];
636 polygon->ymin);
637 polygon->y_buckets[ix] = prev->next;
638 polygon->num_edges--;
643 _polygon_insert_edge_into_its_y_bucket(polygon, e);
644 polygon->num_edges++;
931 polygon_fini(converter->polygon);
950 if (!polygon_init(converter->polygon, num_edges,
975 polygon_add_edge(tor->polygon, t, &t->left, 1, dx, dy);
976 polygon_add_edge(tor->polygon, t, &t->right, -1, dx, dy);
1180 struct polygon *polygon = converter->polygon;
1196 if (fill_buckets(active, polygon->y_buckets[i], buckets) == 0) {
1202 for (; polygon->y_buckets[j] == NULL; j++)
1226 polygon->y_buckets[i] != NULL));
1230 while (polygon->y_buckets[j] == NULL &&
1550 struct polygon *polygon = converter->polygon;
1571 if (fill_buckets(active, polygon->y_buckets[i], buckets) == 0) {
1577 for (; !polygon->y_buckets[j]; j++)
1593 polygon->y_buckets[i] != NULL));
1602 while (polygon->y_buckets[j] == NULL &&
3258 polygon_add_line(tor.polygon, &p1, &p2, dx, dy);
3264 polygon_add_line(tor.polygon, &p1, &p2, dx, dy);
3374 polygon_add_line(tor.polygon, &p1, &p2, dx, dy);
3380 polygon_add_line(tor.polygon, &p1, &p2, dx, dy);
3516 polygon_add_line(tor.polygon, &tri[n].p1, &tri[n].p2, dx, dy);
3517 polygon_add_line(tor.polygon, &tri[n].p2, &tri[n].p3, dx, dy);
3518 polygon_add_line(tor.polygon, &tri[n].p3, &tri[n].p1, dx, dy);
3613 polygon_add_line(tor.polygon, &tri[n].p1, &tri[n].p2, dx, dy);
3614 polygon_add_line(tor.polygon, &tri[n].p2, &tri[n].p3, dx, dy);
3615 polygon_add_line(tor.polygon, &tri[n].p3, &tri[n].p1, dx, dy);
3672 polygon_add_line(tor.polygon,
3677 polygon_add_line(tor.polygon,
3684 polygon_add_line(tor.polygon,
3691 polygon_add_line(tor.polygon,
3694 assert(tor.polygon->num_edges <= 2*thread->count);
3815 polygon_add_line(tor.polygon,
3820 polygon_add_line(tor.polygon,
3827 polygon_add_line(tor.polygon,
3834 polygon_add_line(tor.polygon,
3837 assert(tor.polygon->num_edges <= 2*count);