rendered paste body// Work out min and max X and Y
int minX = min((int)x1, (int)x2, (int)x3);
int maxX = max((int)x1, (int)x2, (int)x3);
int minY = min((int)y1, (int)y2, (int)y3);
int maxY = max((int)y1, (int)y2, (int)y3);
// Make sure they're not outside of the screen
if (minX < 0)
minX = 0;
if (minY < 0)
minY = 0;
if (maxX >= _width)
maxX = _width - 1;
if (maxY >= _height)
maxY = _height - 1;
// Precalculate half-space function coefficients
int dx1 = (int)(x1 - x2);
int dx2 = (int)(x2 - x3);
int dx3 = (int)(x3 - x1);
int dy1 = (int)(y1 - y2);
int dy2 = (int)(y2 - y3);
int dy3 = (int)(y3 - y1);
int check1 = (int)((dx1 * minY) - (dx1 * y1) - (dy1 * minX) + (dy1 * x1));
int check2 = (int)((dx2 * minY) - (dx2 * y2) - (dy2 * minX) + (dy2 * x2));
int check3 = (int)((dx3 * minY) - (dx3 * y3) - (dy3 * minX) + (dy3 * x3));
unsigned int* buffer = (unsigned int*)_pixelBuffer;
buffer += minY * _width;
for (int y = minY; y < maxY; y++)
{
// Create temporary copies of the checks because they'll be needed when loop ends
int check1Temp = check1;
int check2Temp = check2;
int check3Temp = check3;
for (int x = minX; x < maxX; x++)
{
if(check1Temp > 0 &&
check2Temp > 0 &&
check3Temp > 0)
{
buffer[x] = 0;
}
check1Temp -= dy1;
check2Temp -= dy2;
check3Temp -= dy3;
}
buffer += _width;
check1 += dx1;
check2 += dx2;
check3 += dx3;
}