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;
}
|