Blob Blame Raw
#pragma once

#ifndef TTESSELLATOR_H
#define TTESSELLATOR_H

//#include "tpixel.h"
#include "traster.h"
#include "tgl.h"
#include "tthreadmessage.h"

class TColorFunction;
class TRegionOutline;

#undef DVAPI
#undef DVVAR

#ifdef TVRENDER_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif

//=============================================================================
//==================== TTessellator ===========================================
//=============================================================================

class DVAPI TTessellator
{

public:
	virtual ~TTessellator()
	{
	}

	virtual void tessellate(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &outline, TPixel32 color) = 0;
	virtual void tessellate(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &outline, TRaster32P texture) = 0;
};

//=============================================================================
//==================== OpenGL Tessellator ===========================================
//=============================================================================

class DVAPI TglTessellator : public TTessellator
{

public:
	//TThread::Mutex m_mutex;

	class DVAPI GLTess
	{
	public:
#ifdef GLU_VERSION_1_2
		GLUtesselator *m_tess;
#else
#ifdef GLU_VERSION_1_1
		GLUtriangulatorObj *m_tess;
#else
		void *m_tess;
#endif
#endif

		GLTess();
		~GLTess();
	};

private:
	//static GLTess m_glTess;

	void doTessellate(GLTess &glTess, const TColorFunction *cf, const bool antiAliasing, TRegionOutline &outline);
	void doTessellate(GLTess &glTess, const TColorFunction *cf, const bool antiAliasing, TRegionOutline outline, const TAffine &aff);

public:
	//void tessellate(const TVectorRenderData &rd, TRegionOutline &outline );
	void tessellate(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &outline, TPixel32 color);
	void tessellate(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &outline, TRaster32P texture);
};

//=============================================================================

#endif