Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/model')
-rw-r--r--src/model/material.cc20
-rw-r--r--src/model/material.h6
2 files changed, 26 insertions, 0 deletions
diff --git a/src/model/material.cc b/src/model/material.cc
index b76be02..ff9a257 100644
--- a/src/model/material.cc
+++ b/src/model/material.cc
@@ -21,6 +21,7 @@ Material::Registry Material::material_registry;
Material::Material(const std::string &name) :
material_name(name),
material_color(1.0f) ,
+ material_specular(1.0f) ,
material_size(64.0f, 64.0f)
{
aux::to_lowercase(material_name);
@@ -90,6 +91,11 @@ void Material::set_color(const math::Color &color)
//material_color.a = 1.0f;
}
+void Material::set_specular(const math::Color &color)
+{
+ material_specular.assign(color);
+}
+
void Material::set_texture(const std::string &texture)
{
if (texture.size()) {
@@ -227,6 +233,20 @@ void Material::load_shader(const std::string &shadername)
a = 1.0f;
}
material->set_color(math::Color(r, g, b, a));
+ // set specular too, preserving the old behavior
+ material->set_specular(math::Color(r, g, b, a));
+ }
+ } else if (firstword.compare("specular") == 0) {
+ if (linestream >> r >> g >> b) {
+ if (math::max(r, math::max(g, b)) > 1.0f) {
+ r /= 255.0f;
+ g /= 255.0f;
+ b /= 255.0f;
+ }
+ if (!(linestream >> a)) {
+ a = 1.0f;
+ }
+ material->set_specular(math::Color(r, g, b, a));
}
} else if (firstword.compare("engine") == 0) {
material->set_flags(Engine);
diff --git a/src/model/material.h b/src/model/material.h
index b128954..2c66aae 100644
--- a/src/model/material.h
+++ b/src/model/material.h
@@ -45,6 +45,10 @@ public:
return material_color;
}
+ inline const math::Color &specular() const {
+ return material_specular;
+ }
+
inline const unsigned int flags() const {
return material_flags;
}
@@ -90,6 +94,7 @@ public:
/* ---- mutators ------------------------------------------- */
void set_color(const math::Color &color);
+ void set_specular(const math::Color &specular);
/**
* @brief set the material texture name
*/
@@ -157,6 +162,7 @@ private:
std::string material_name;
math::Color material_color;
+ math::Color material_specular;
unsigned int material_flags;
std::string material_texture;
size_t material_texture_id;