]> git.tdb.fi Git - libs/gl.git/blob - source/materials/pbrmaterial.h
Overhaul texture management in rendering classes
[libs/gl.git] / source / materials / pbrmaterial.h
1 #ifndef MSP_GL_PBRMATERIAL_H_
2 #define MSP_GL_PBRMATERIAL_H_
3
4 #include "material.h"
5
6 namespace Msp {
7 namespace GL {
8
9 class PbrMaterial: public Material
10 {
11 public:
12         class Loader: public DataFile::DerivedObjectLoader<PbrMaterial, Material::PropertyLoader<PbrMaterial> >
13         {
14         private:
15                 static ActionMap shared_actions;
16
17         public:
18                 Loader(PbrMaterial &);
19                 Loader(PbrMaterial &, Collection &);
20
21         private:
22                 virtual void init_actions();
23         };
24         
25 private:
26         Property<Color> base_color;
27         Property<Vector3> normal;
28         Property<float> metalness;
29         Property<float> roughness;
30         Property<float> occlusion;
31         Property<Color> emission;
32         bool receive_shadows;
33
34         static const Tag texture_tags[];
35
36 public:
37         PbrMaterial();
38
39 protected:
40         virtual void fill_program_info(std::string &, std::map<std::string, int> &) const;
41
42 public:
43         DEPRECATED virtual void attach_textures_to(Texturing &, ProgramData &) const;
44
45         virtual const Tag *get_texture_tags() const { return texture_tags; }
46         virtual const Texture *get_texture(Tag) const;
47
48         void set_base_color(const Color &);
49         void set_base_color_map(const Texture *);
50         void set_normal_map(const Texture *);
51         void set_metalness(float);
52         void set_metalness_map(const Texture *);
53         void set_roughness(float);
54         void set_roughness_map(const Texture *);
55         void set_occlusion_map(const Texture *);
56         void set_emission(const Color &);
57         void set_emission_map(const Texture *);
58         void set_receive_shadows(bool);
59 };
60
61 } // namespace GL
62 } // namespace Msp
63
64 #endif