#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 final : 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) override;
void tessellate(const TColorFunction *cf, const bool antiAliasing,
TRegionOutline &outline, TRaster32P texture) override;
};
//=============================================================================
#endif