float t;
v0 = normalize(v0);
v1 = normalize(v1);
v2 = normalize(v2);
if (flag == 4) { // hither clipping yields 2 triangles
float tx = v2.x, ty = v2.y, tz = v2.z, tw = v2.w;
int trgb = rgb[2];
t = (near - v1.w)/(tw - v1.w);
Vertex3D.lerp(v2, v1, v2, t);
rgb[2] = rgbLerp(rgb[1], trgb, t);
v0 = normalize(v0);
v1 = normalize(v1);
v2 = normalize(v2);
ClipYon(raster);
v0 = normalize(v0);
v1.x = v2.x; v1.y = v2.y; v1.z = v2.z; v1.w = v2.w; rgb[1] = rgb[2];
v2.x = tx; v2.y = ty; v2.z = tz; v2.w = tw;
t = (near - v0.w)/(tw - v0.w);
Vertex3D.lerp(v2, v0, v2, t);
rgb[2] = rgbLerp(rgb[0], trgb, t);
v0 = normalize(v0);
v2 = normalize(v2);
ClipYon(raster);
} else