- int i, sline, x, slen, top = 0;
- int left_beg, left_end, right_beg, right_end;
- int32_t left_dy, left_dx, right_dy, right_dx;
- int32_t left_slope, right_slope;
- int32_t left_x, right_x, y;
- uint16_t color = ((pv->r << 8) & 0xf800) | ((pv->g << 3) & 0x7e0) |
- ((pv->b >> 3) & 0x1f);
- uint16_t *pixptr;
-
- /* find topmost */
- for(i=1; i<nverts; i++) {
- if(pv[i].y < pv[top].y) {
- top = i;
- }
- }
- left_beg = right_beg = top;
- left_end = PREVIDX(left_beg);
- right_end = NEXTIDX(right_beg);
-
- if((left_dy = pv[left_end].y - pv[left_beg].y)) {
- CALC_EDGE(left);
- }
-
- if((right_dy = pv[right_end].y - pv[right_beg].y)) {
- CALC_EDGE(right);
- }
-
- y = pv[top].y;
- sline = pv[top].y >> 8;
-
- for(;;) {
- if(y >= pv[left_end].y) {
- while(y >= pv[left_end].y) {
- left_beg = left_end;
- if(left_beg == right_beg) return;
- left_end = PREVIDX(left_end);
- }
-
- left_dy = pv[left_end].y - pv[left_beg].y;
- CALC_EDGE(left);
- }
-
- if(y >= pv[right_end].y) {
- while(y >= pv[right_end].y) {
- right_beg = right_end;
- if(left_beg == right_beg) return;
- right_end = NEXTIDX(right_end);
- }