Even More SmoothTri.Draw( )

The inner loop

	/*
	    .... scan convert triangle ....
	*/
	for (y = yMin; y <= yMax; y += 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 6   Slide 29   6.837 Fall '01