typedef float scalar_t;
typedef scalar_t vertex2d_t[2];
typedef scalar_t vertex3d_t[3];
typedef unsigned char color_t[4];

class Primitive
{
public:
	virtual ~Primitive() = 0;
	virtual void render() = 0;
};

class Triangle: public Primitive
{
public:
	Triangle(vertex3d_t &verts, vertex2d_t &tex, vertex3d_t &norms);
	Triangle(vertex3d_t &verts, vertex2d_t &tex);
	Triangle();
	~Triangle();

	void setVert(int vert, vertex3d_t &coord);
	void setTexCoord(int vert, vertex2d_t &coord);
	void setNormal(int vert, vertex3d_t &normal);

	vertex3d_t &getVert(int vert);
	vertex2d_t &getTexCoord(int vert);
	vertex3d_t &getNormal(int vert);

	void render();

private:
	vertex3d_t m_verts[3], m_normals[3];
	vertex2d_t m_tex_coords[3];
};