#pragma once

namespace M3D
{

	/**
		@author Denis A. Biryukov <denis.birukov@gmail.com>
	*/
	class OpenGLState
	{
		public:
			OpenGLState();
			~OpenGLState();
			/**
			 * Включение теста глубины
			 */
			void enable_depth_test ();
			/**
			 * Отключение теста глубины
			 */
			void disable_depth_test();

			/**
			 * Включение 2д текстур
			 */
			void enable_texture_2d ();
			/**
			 * Отключение 2д текстур
			 */
			void disable_texture_2d ();
                        
                        /**
                         * Включение альфа-смешивания
                         */
                        void enable_blend();
                        /**
                         * Отключение альфа-смешивания
                         */
                        void disable_blend();
                        
                        /**
                         * Выставляет текущую используемую шейдерную программу
                         * @param program_id идиентификатор программы
                         */
                        void use_program(int program_id);
                        /**
                         * Устанавливает текущий используемый вертексный массив
                         * @param vao_id идиентификатор вертексного массива
                         */
                        void bind_vertex_array(int vao_id);
                        /**
                         * Производит инициализацию значений из текущего контекста OpenGL
                         */
                        void fill();
			/**
			 * Возвращает номер текущей шейдерной программы
			 * @return идиентификатор текущей шейдерной программы
			 */
			int get_current_program(){ return _program_id_;}

		private:
			bool _depth_test_;
			bool _texture_2d_;
                        bool _blend_;
                        int _program_id_;
                        int _vao_id_;
                        int _2d_texture_id_;
	};

}


