Code:
int DrawPolygon(Uint32 buffer[], Polygon p)
{
// Using a linked list content must be copied across first?
float x[p.size];
float y[p.size];
Point *ptr = p.pt;
int i=0;
while(ptr)
{
x[i] = ptr->x;
y[i] = ptr->y;
i++;
ptr = ptr->next;
}
//if(p.flags & POLYGON_IS_SPLINE)
// return DrawSpline(p);
switch(p.size)
{
case 1:
DrawPixel(buffer, x[0], y[0], p.color);
break;
case 2:
DrawLine(buffer, x[0], y[0], x[1], y[1], p.color);
break;
case 3:
if(p.flags & POLYGON_IS_FILLED)
DrawTriangle(buffer, x[0], y[0], x[1], y[1], x[2], y[2], p.color, 1);
else if(p.flags & POLYGON_IS_CLOSED)
DrawTriangle(buffer, x[0], y[0], x[1], y[1], x[2], y[2], p.color, 0);
else
{
DrawLine(buffer, x[0], y[0], x[1], y[1], p.color);
DrawLine(buffer, x[1], y[1], x[2], y[2], p.color);
}
break;
case 4:
if(p.flags & POLYGON_IS_FILLED)
DrawRhombus(buffer, x[0], y[0], x[1], y[1], x[2], y[2], x[3], y[3], p.color, 1);
else if(p.flags & POLYGON_IS_CLOSED)
DrawRhombus(buffer, x[0], y[0], x[1], y[1], x[2], y[2], x[3], y[3], p.color, 0);
else
{
DrawLine(buffer, x[0], y[0], x[1], y[1], p.color);
DrawLine(buffer, x[1], y[1], x[2], y[2], p.color);
DrawLine(buffer, x[2], y[2], x[3], y[3], p.color);
}
break;
default:
break;
}
return 0;
}