/* 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 namespace model { /// fragment surface material parameters class Material { public: /// surface flags enum SurfaceFlags { None=0, Primary=1, Secondary=2, Tertiary=3, Dark=4, Light=8, Engine=16}; /// type definition for the material registry typedef std::map Registry; Material(const std::string &name); ~Material(); inline const std::string &name() { return material_name; } /* ---- 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; /// the material registry static Registry material_registry; static void load_shader(const std::string &shadername); }; } #endif // __INCLUDED_MODEL_MATERIAL_H__