#ifndef THGLUTRENDERER
#define THGLUTRENDERER

#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif


#include <GL/glut.h>
#include <ThCore.h>
#include <ThEngine.h>

#include "ThGlutCamera.h"

namespace Th {

class GlutRenderer : public Renderer
{
	DECLARE_RTTI;
	DECLARE_IS_DERIVED_FROM
public:
	GlutRenderer(int iWidth, int iHeight);
	GlutRenderer(int iWidth, int iHeight, const Color& rkBGColor);
	virtual void DisplayBackBuffer();
	virtual void ClearBuffers();
	virtual void RenderPoint(const Vector3& rkPoint);
	virtual void RenderLine(const Vector3& rkStart, const Vector3& rkEnd);
	virtual void SetBackgroundColor(const Color& rkBackgroundColor);
	virtual void RenderSphere(const Vector3& rfCenter, const Real& rfRadius);
		
	//Render Leaf types

	virtual void Render(const PointMesh* pkPointMesh);
	virtual void Render(const MD2Object* pkMD2Object);

	//Renderstates setup

	virtual void SetZBufferState(ZBufferState* pkState);
	virtual void SetTextureState(TextureState* pkState);
private:
	virtual void PlaceInWorld(const Geometry* pkObject);
};

}

#endif //THGLUTRENDERER