/* model/material.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_MATERIAL_H__ #define __INCLUDED_MODEL_MATERIAL_H__ #include #include #include "math/color.h" namespace model { /// fragment surface material parameters class Material { public: /// surface flags enum SurfaceFlags { None=0, Primary=1, Secondary=2, Tertiary=3, Bright=4, Engine=8, Environment=16}; /// type definition for the material registry typedef std::map Registry; Material(const std::string &name); ~Material(); inline const std::string &name() const { return material_name; } inline const math::Color &color() const { return material_color; } inline const unsigned int flags() const { return material_flags; } inline void set_flags(SurfaceFlags flags) { material_flags |= flags; } inline void unset_flags(SurfaceFlags flags) { material_flags &= ~flags; } void set_color(const math::Color &color); /* ---- static ----------------------------------------------------- */ /** * @brief initialize materials * reads materials from the shader files */ static void init(); /// clear all materials static void shutdown(); /// clear all materials static void clear(); /// list registered materials static void list(); /// add a material to the registry static void add(Material *material); /// find a material in the registry static Material *find(const std::string &name); private: std::string material_name; math::Color material_color; unsigned int material_flags; /// the material registry static Registry material_registry; static void load_shader(const std::string &shadername); }; } #endif // __INCLUDED_MODEL_MATERIAL_H__