Even More SmoothTri.Draw( )

The inner loop

        /*
             .... scan convert triangle ....
        */
        for (y = yMin; y <= yMax; y += raster.width) {
	        int e0 = t0;    int e1 = t1;    int e2 = t2;    int xflag = 0;
	        int a = ta;     int r = tr;     int g = tg;     int b = tb;
	        for (x = xMin; x <= xMax; x++) {
	            if ((e0|e1|e2) >= 0) {      // all 3 edges must be >= 0
                    int pixa = (a >> EdgeEqn.FRACBITS);
                    int pixr = (r >> EdgeEqn.FRACBITS);
                    int pixg = (g >> EdgeEqn.FRACBITS);
                    int pixb = (b >> EdgeEqn.FRACBITS);
                    pixa = ((pixa & ~255) == 0) ? pixa << 24 : ((a < 0) ? 0 : 0xff000000);
                    pixr = ((pixr & ~255) == 0) ? pixr << 16 : ((r < 0) ? 0 : 0x00ff0000);
                    pixg = ((pixg & ~255) == 0) ? pixg << 8  : ((g < 0) ? 0 : 0x0000ff00);
                    pixb = ((pixb & ~255) == 0) ? pixb       : ((b < 0) ? 0 : 0x000000ff);
                    raster.pixel[y+x] = (pixa | pixr | pixg | pixb);
                    xflag++;	            
	            } else if (xflag != 0) break;
	            e0 += A0;   e1 += A1;   e2 += A2;
	            a += Aa;    r += Ar;    g += Ag;    b += Ab;
	        }
	        t0 += B0;   t1 += B1;   t2 += B2;
	        ta += Ba;   tr += Br;   tg += Bg;   tb += Bb;
        }
    }
}
	
Lecture 7 Slide 27 6.837 Fall '98