diff options
Diffstat (limited to 'src/model/material.h')
-rw-r--r-- | src/model/material.h | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/src/model/material.h b/src/model/material.h index bdfee68..8081792 100644 --- a/src/model/material.h +++ b/src/model/material.h @@ -7,13 +7,58 @@ #ifndef __INCLUDED_MODEL_MATERIAL_H__ #define __INCLUDED_MODEL_MATERIAL_H__ +#include <string> +#include <map> + namespace model { +/// fragment surface material parameters class Material { public: - enum Flags { None=0, Primary=1, Secondary=2, Tertiary=3, Dark=4, Light=8, Engine=16}; + /// 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<std::string, Material *> 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); }; } |