#ifndef GE_OPENGL_H
#define GE_OPENGL_H

/*
	Ripatti Artem (c) 2013

	Это заголовочный файл реализации интерфейса XGraphicEngine
	при помощи OpenGL + FLTK.
*/

#include "ge_iface.h"
#include <FL/gl.h>

#define MAX_TEXTURE		256

namespace ge
{
	class ZGraphicEngineOpenGL : public XGraphicEngine
	{
		unsigned int _tex_id[MAX_TEXTURE];
		float _sc_tex_x[MAX_TEXTURE], _sc_tex_y[MAX_TEXTURE];
		int _sz_tex_x[MAX_TEXTURE], _sz_tex_y[MAX_TEXTURE];

		int _target_tex;

		float _sx, _sy;
		int _cur_t;

		void make_render_target( int num, int sx, int sy );
	public:
		ZGraphicEngineOpenGL( int sx, int sy );
		~ZGraphicEngineOpenGL();

		void load_texture( int num, const char * path, const char * alpha );
		void load_texture_from_png( int num, const char * path );

		// с этого надо начинать фрейм
		virtual void begin_scene();

		// залить все цветом (R,G,B)
		virtual void clear_scene(float R=0.f, float G=0.f, float B=0.f);

		// вывести сцену на экран. этим надо заканчивать фрейм
		virtual void render_scene();

		// назначить текстуру T текущей
		virtual void set_texture(int T);

		// отрисовать картинку Pict
		virtual void draw_pict(ge::PICT & pict);

		// выбор текстуры для отрисовки (-1 - рисовать не в текстуру, а на экран)
		virtual void render_to_texture(int T = -1);

		// написать ch в точке (x,y) цветом (R,G,B,A)
		virtual void write(float x, float y, const char * ch,
			float R=0.f, float G=1.f, float B=0.f, float A=0.94f);
	};
};

#endif
