#pragma once
#include "m3dml.h"

namespace M3D
{
class Texture;
class EngineInterface;
class OpenGLState;
	/**
	 * @author Denis A. Biryukov <denis.birukov@gmail.com>
	 */
	class MaterialLayer
	{
		public:
                        /**
                         * Применяет слой
                         */
			virtual void set_layer(OpenGLState *state) = 0;
			/**
			 * Получение типа слоя
			 * @return тип слоя
			 */
			M3DML_BLOCK_TYPE get_layer_type() const { return _layer_type_;}
			/**
			 * Производит загрузку слоя, заполняет его внутренние данные в соответствии с тем, что хранится в данном слое
			 * @param base_dir базовый каталог для поиска файлов
			 * @param layer_type тип слоя
			 * @param layer указатель на данные загружаемого слоя
			 * @param engine указатель на интерфейс движка для которого грузится объект
			 */
			virtual void load(const std::string &base_dir, M3DML_BLOCK_TYPE block_type, const M3DML_Layer *layer,  EngineInterface *engine) = 0;
			MaterialLayer();
			virtual ~MaterialLayer();
                protected:
			void set_layer_type();
			M3DML_BLOCK_TYPE _layer_type_;
			std::string _layer_name_;
	};
}
