]> git.tdb.fi Git - libs/gl.git/blobdiff - source/materials/light.cpp
Redesign Light to only have a single color
[libs/gl.git] / source / materials / light.cpp
index e910411f276e27ebd305f507513177787caebb25..d84be2ac8dcc1a8542212df87c6f8063aebbaed2 100644 (file)
@@ -11,8 +11,7 @@ namespace Msp {
 namespace GL {
 
 Light::Light():
-       diffuse(1),
-       specular(1),
+       color(1),
        position(0, 0, 1, 0),
        spot_dir(0, 0, -1),
        spot_exp(0),
@@ -40,14 +39,9 @@ void Light::update_matrix()
        matrix = Matrix::from_columns(columns);
 }
 
-void Light::set_diffuse(const Color &c)
+void Light::set_color(const Color &c)
 {
-       diffuse = c;
-}
-
-void Light::set_specular(const Color &c)
-{
-       specular = c;
+       color = c;
 }
 
 void Light::set_matrix(const Matrix &m)
@@ -107,8 +101,7 @@ void Light::update_shader_data(ProgramData &shdata, const Matrix &view_matrix, u
 {
        string base = format("light_sources[%d]", i);
        shdata.uniform(base+".position", view_matrix*position);
-       shdata.uniform(base+".diffuse", diffuse);
-       shdata.uniform(base+".specular", specular);
+       shdata.uniform(base+".color", color.r, color.g, color.b);
 }
 
 
@@ -116,12 +109,15 @@ Light::Loader::Loader(Light &l):
        DataFile::ObjectLoader<Light>(l)
 {
        add("attenuation", &Loader::attenuation);
-       add("diffuse", &Loader::diffuse);
+       add("color", &Loader::color);
        add("position", &Loader::position);
-       add("specular", &Loader::specular);
        add("spot_direction", &Loader::spot_direction);
        add("spot_exponent", &Loader::spot_exponent);
        add("spot_cutoff", &Loader::spot_cutoff);
+
+       // Deprecated
+       add("diffuse", &Loader::color);
+       add("specular");
 }
 
 void Light::Loader::attenuation(float c, float l, float q)
@@ -129,9 +125,9 @@ void Light::Loader::attenuation(float c, float l, float q)
        obj.set_attenuation(c, l, q);
 }
 
-void Light::Loader::diffuse(float r, float g, float b)
+void Light::Loader::color(float r, float g, float b)
 {
-       obj.set_diffuse(Color(r, g, b));
+       obj.set_color(Color(r, g, b));
 }
 
 void Light::Loader::position(float x, float y, float z, float w)
@@ -139,11 +135,6 @@ void Light::Loader::position(float x, float y, float z, float w)
        obj.set_position(Vector4(x, y, z, w));
 }
 
-void Light::Loader::specular(float r, float g, float b)
-{
-       obj.set_specular(Color(r, g, b));
-}
-
 void Light::Loader::spot_direction(float x, float y, float z)
 {
        obj.set_spot_direction(Vector3(x, y, z));