We've added two new instance variables. The first is simply an
optimization that detects the case when all three vertices are
the same color. In this case we'll call the slightly faster
FlatTri methods that we inherited. The second is a scale factor
that we'll disscuss next.
Next we add a new method to compute the plane equations of our
parameters. The PlaneEqn() method performs the
required matrix multiply and avoids computing the inverse of
the triangle area more than once.
public void PlaneEqn(int eqn[], int p0, int p1, int p2) {
int Ap, Bp, Cp;
if (scale <= 0) {
scale = (1 << EdgeEqn.FRACBITS) / ((double) area);
}
double sp0 = scale * p0;
double sp1 = scale * p1;
double sp2 = scale * p2;
Ap = (int)(edge[0].A*sp2 + edge[1].A*sp0 + edge[2].A*sp1);
Bp = (int)(edge[0].B*sp2 + edge[1].B*sp0 + edge[2].B*sp1);
Cp = (int)(edge[0].C*sp2 + edge[1].C*sp0 + edge[2].C*sp1);
eqn[0] = Ap;
eqn[1] = Bp;
eqn[2] = Ap*xMin + Bp*yMin + Cp + (1 << (EdgeEqn.FRACBITS - 1));
}