/*
	ZTessellator.h
	Author: Patrick Baggett <ptbaggett@762studios.com>

	Purpose: Header for tessellator interface. (currently requires GLU)

	Changelog
	2011/09/18 - creation (ptbaggett)
*/

#pragma once

#ifndef _ZTESSELLATOR_HPP
#define _ZTESSELLATOR_HPP

#include <ZRendererUtil/ZOutlineEvaluator.hpp>

//Types of tessellations we can handle
enum ZTesselatorPolyType
{
	ZTPT_POLY_TRIANGLES,
	ZTPT_POLY_TRIFAN,
	ZTPT_POLY_TRISTRIP
};

class ZTessellator
{
protected:
	//Protected Constructor
	ZTessellator() { }

public:
	//Virtual Destructor
	virtual ~ZTessellator() { }

	/*
	virtual public ZTessellator::BeginPoly
	
	TODO
	
	@param type - 
	@return (void)
	@context (all)
	*/
	virtual void BeginPoly(ZTesselatorPolyType type) = 0;

	/*
	virtual public ZTessellator::BeginTessellate
	
	TODO
	
	@return (void)
	@context (all)
	*/
	virtual void BeginTessellate() = 0;

	/*
	virtual public ZTessellator::EndPoly
	
	TODO
	
	@return (void)
	@context (all)
	*/
	virtual void EndPoly() = 0;

	/*
	virtual public ZTessellator::EndTessellate
	
	TODO
	
	@return (void)
	@context (all)
	*/
	virtual void EndTessellate() = 0;

	/*
	virtual public ZTessellator::Tessellate
	
	TODO
	
	@return (void)
	@context (all)
	*/
	virtual void Tesselate() = 0;

	/*
	virtual public ZTessellator::Vertex
	
	TODO
	
	@param p - 
	@return (void)
	@context (all)
	*/
	virtual void Vertex(SST_Vec2f* p) = 0;		
};

#endif

