]> git.tdb.fi Git - libs/gl.git/blob - source/materials/basicmaterial.h
bf1b0e8cdfb1190b114906abe398e4f1376216e4
[libs/gl.git] / source / materials / basicmaterial.h
1 #ifndef MSP_GL_BASICMATERIAL_H_
2 #define MSP_GL_BASICMATERIAL_H_
3
4 #include "material.h"
5
6 namespace Msp {
7 namespace GL {
8
9 class BasicMaterial: public Material
10 {
11 public:
12         class Loader: public DataFile::DerivedObjectLoader<BasicMaterial, Material::PropertyLoader<BasicMaterial> >
13         {
14         private:
15                 static ActionMap shared_actions;
16
17         public:
18                 Loader(BasicMaterial &, Collection &);
19
20         private:
21                 virtual void init_actions();
22         };
23
24 private:
25         Property<Color> diffuse;
26         Property<Color> specular;
27         Property<float> shininess;
28         Property<Vector3> normal;
29         Property<Color> emission;
30         Property<float> reflectivity;
31
32         static const Tag texture_tags[];
33
34 public:
35         BasicMaterial();
36
37 protected:
38         virtual void fill_program_info(std::string &, std::map<std::string, int> &) const;
39
40 public:
41         virtual const Tag *get_texture_tags() const { return texture_tags; }
42         virtual const Texture *get_texture(Tag) const;
43
44         void set_diffuse(const Color &);
45         void set_diffuse_map(const Texture *);
46         void set_specular(const Color &);
47         void set_specular_map(const Texture *);
48         void set_normal_map(const Texture *);
49         void set_emission(const Color &);
50         void set_emission_map(const Texture *);
51         void set_shininess(float);
52         void set_shininess_map(const Texture *);
53         void set_reflectivity(float);
54         void set_reflectivity_map(const Texture *);
55 };
56
57 } // namespace GL
58 } // namespace Msp
59
60 #endif