]> git.tdb.fi Git - libs/gl.git/blob - source/basicmaterial.cpp
Redesign the material system
[libs/gl.git] / source / basicmaterial.cpp
1 #include "basicmaterial.h"
2
3 using namespace std;
4
5 namespace Msp {
6 namespace GL {
7
8 BasicMaterial::BasicMaterial()
9 {
10         set_diffuse(Color(1.0f));
11         set_specular(Color(0.0f));
12         set_emission(Color(0.0f));
13         set_shininess(50.0f);
14         set_reflectivity(0.0f);
15 }
16
17 void BasicMaterial::attach_textures_to(Texturing &texturing, ProgramData &tex_shdata) const
18 {
19         attach_texture_to(diffuse.texture, texturing, tex_shdata, "diffuse_map");
20         attach_texture_to(specular.texture, texturing, tex_shdata, "specular_map");
21         attach_texture_to(normal.texture, texturing, tex_shdata, "normal_map");
22         attach_texture_to(emission.texture, texturing, tex_shdata, "emission_map");
23         attach_texture_to(shininess.texture, texturing, tex_shdata, "shininess_map");
24         attach_texture_to(reflectivity.texture, texturing, tex_shdata, "reflectivity_map");
25 }
26
27 void BasicMaterial::set_diffuse(const Color &color)
28 {
29         diffuse.value = color;
30         shdata.uniform("basic_material.diffuse", color);
31 }
32
33 void BasicMaterial::set_diffuse_map(const Texture *tex)
34 {
35         diffuse.texture = tex;
36 }
37
38 void BasicMaterial::set_specular(const Color &color)
39 {
40         specular.value = color;
41         shdata.uniform("basic_material.specular", color);
42 }
43
44 void BasicMaterial::set_specular_map(const Texture *tex)
45 {
46         specular.texture = tex;
47 }
48
49 void BasicMaterial::set_normal_map(const Texture *tex)
50 {
51         normal.texture = tex;
52 }
53
54 void BasicMaterial::set_emission(const Color &color)
55 {
56         emission.value = color;
57         shdata.uniform("basic_material.emission", color);
58 }
59
60 void BasicMaterial::set_emission_map(const Texture *tex)
61 {
62         emission.texture = tex;
63 }
64
65 void BasicMaterial::set_shininess(float value)
66 {
67         shininess.value = value;
68         shdata.uniform("basic_material.shininess", value);
69 }
70
71 void BasicMaterial::set_shininess_map(const Texture *tex)
72 {
73         shininess.texture = tex;
74 }
75
76 void BasicMaterial::set_reflectivity(float value)
77 {
78         reflectivity.value = value;
79         shdata.uniform("basic_material.reflectivity", value);
80 }
81
82 void BasicMaterial::set_reflectivity_map(const Texture *tex)
83 {
84         reflectivity.texture = tex;
85 }
86
87
88 DataFile::Loader::ActionMap BasicMaterial::Loader::shared_actions;
89
90 BasicMaterial::Loader::Loader(BasicMaterial &m):
91         DerivedObjectLoader<BasicMaterial, Material::LoaderBase<BasicMaterial> >(m)
92 {
93         set_actions(shared_actions);
94 }
95
96 BasicMaterial::Loader::Loader(BasicMaterial &m, Collection &c):
97         DerivedObjectLoader<BasicMaterial, Material::LoaderBase<BasicMaterial> >(m, c)
98 {
99         set_actions(shared_actions);
100 }
101
102 void BasicMaterial::Loader::init_actions()
103 {
104         add_property("diffuse", &BasicMaterial::set_diffuse, &BasicMaterial::set_diffuse_map, true);
105         add_property("specular", &BasicMaterial::set_specular, &BasicMaterial::set_specular_map, false);
106         add_property("normal", &BasicMaterial::set_normal_map);
107         add_property("emission", &BasicMaterial::set_emission, &BasicMaterial::set_emission_map, false);
108         add_property("shininess", &BasicMaterial::set_shininess, &BasicMaterial::set_shininess_map);
109         add_property("reflectivity", &BasicMaterial::set_reflectivity, &BasicMaterial::set_reflectivity_map);
110 }
111
112 } // namespace GL
113 } // namespace Msp