/* model/layers.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_MODEL_LAYER_H__ #define __INCLUDED_MODEL_LAYER_H__ #include "math/vector2f.h" #include "math/color.h" namespace model { /** * @brief a single layer within a material * */ class Layer { public: /** * @brief color generation type definition * */ enum RGBGen { RGBGenIdentity = 1, // unmodified RGBGenColor = 2, // modified by layer color RGBGenEngine = 3, // modified by engine color RGBGenPrimary = 4, // modified by primary entity color RGBGenSecondary = 5, // modified by secondary entity color RGBGenTertiary = 6 // modified by tertiary entity color }; /** * @brief texture map type definition * */ enum TexMap { TexMapNone = 0, // no texture map TexMapImage = 1, // texture map from image TexMapEnvironment = 2, // texture map with skybox TexMapLogo = 3 // use current logo texture }; /** * @brief texture coordinate generation type definition * */ enum TCGen { TCGenBase = 1, // use texture coordinates from vertex array TCGenEnvironment = 2 // texture coordinates generated by GL_SPHERE_MAP/GL_REFLECTION_MAP }; /** * @brief default constructor * */ Layer(); /** * @brief default destructor * */ ~Layer(); /* ---- inspectors ----------------------------------------- */ /** * @brief size of the layer, in pixels */ inline const math::Vector2f & size() const { return layer_size; } /** * @brief rgb color generation source for this material layer * */ inline const RGBGen rgbgen() const { return layer_rgbgen; } /** * @brief layer color * The layer color is used if color source if rgbgen() is set to RGBGenColor * */ inline const math::Color & color() const { return layer_color; } /** * @brief layer specular color * The specular color is used in lighting calculations. * */ inline const math::Color & specular() const { return layer_color_specular; } /** * @brief layer texture map */ const TexMap texmap() const { return layer_texmap; } /** * @brief layer texture map name * The layer texture mapa name is used if texmap() is set to TexMapTexture * */ inline const std::string &texture() const { return layer_texture_name; } /** * @brief layer texture map renderer id * */ inline const size_t texture_id() const { return layer_texture_id; } /** * @brief texture coordinates generation source for this material layer * */ inline const TCGen tcgen() const { return layer_tcgen; } /** * @brief returns true if lighting calculations should be disabled for this layer * */ inline const bool bright() const { return layer_bright; } /* ---- mutators ------------------------------------------- */ /** * @brief set rgb color generation source * */ void set_rgbgen(const RGBGen rgbgen); /** * @brief set layer color * */ void set_color(const math::Color & color); /** * @brief set layer specular color * This value is used in lighting calculations * */ void set_specular(const math::Color & specular); /** * @brief set the texture map type * */ void set_texmap(const TexMap texmap); /** * @brief set the texture map name * */ void set_texture(const std::string & texture); /** * @brief set the renderer texture id * */ void set_texture_id(const size_t id); /** * @brief set texture coordinates generation source * */ void set_tcgen(const TCGen tcgen); /** * @brief enable or disable lighting calculations on this layer * If set to true, lighting is disabled. * */ void set_bright(const bool bright); /** * @brief set the layer size, in pixels * */ void set_size(const math::Vector2f & size); private: math::Vector2f layer_size; RGBGen layer_rgbgen; math::Color layer_color; math::Color layer_color_specular; TexMap layer_texmap; std::string layer_texture_name; size_t layer_texture_id; TCGen layer_tcgen; bool layer_bright; }; } // namespace model #endif // __INCLUDED_MODEL_LAYER_H__