light = normalize(eye_light_dir);
float shadow = get_shadow_factor(0);
- vec3 color = cooktorrance_one_light_direct(normal, look, light, light_sources[0].diffuse.rgb, base_color, metalness, roughness)*shadow;
+ vec3 color = cooktorrance_one_light_direct(normal, look, light, light_sources[0].color, base_color, metalness, roughness)*shadow;
color *= get_occlusion_value();
struct LightSourceParameters
{
vec4 position;
- vec4 diffuse;
- vec4 specular;
+ vec3 color;
};
struct ClipPlane
vec3 color = phong_ambient(surface_diffuse);
float shadow = get_shadow_factor(0);
- color += phong_one_light(light, normal, look, light_sources[0].diffuse.rgb, surface_diffuse, surface_specular, shininess)*shadow;
+ color += phong_one_light(light, normal, look, light_sources[0].color, surface_diffuse, surface_specular, shininess)*shadow;
if(use_emission)
color += get_emission_color();
namespace GL {
Light::Light():
- diffuse(1),
- specular(1),
+ color(1),
position(0, 0, 1, 0),
spot_dir(0, 0, -1),
spot_exp(0),
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)
{
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);
}
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)
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)
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));
private:
void attenuation(float, float, float);
- void diffuse(float, float, float);
+ void color(float, float, float);
void position(float, float, float, float);
- void specular(float, float, float);
void spot_direction(float, float, float);
void spot_exponent(float);
void spot_cutoff(float);
};
private:
- Color diffuse;
- Color specular;
+ Color color;
Vector4 position;
Vector3 spot_dir;
Vector3 direction;
void update_matrix();
public:
- /** Sets the diffuse (direction-independent) color of the Light. Provided
- to shaders with the name light_sources[i].diffuse. */
- void set_diffuse(const Color &c);
+ /** Sets the color of the Light. Provided
+ to shaders as light_sources[i].color. */
+ void set_color(const Color &);
- /** Sets the specular (direction-dependent) color of the Light. Provided to
- shaders with the name light_sources[i].specular. */
- void set_specular(const Color &c);
+ const Color &get_color() const { return color; }
- const Color &get_diffuse() const { return diffuse; }
- const Color &get_specular() const { return specular; }
+ DEPRECATED void set_diffuse(const Color &c) { set_color(c); }
+ DEPRECATED void set_specular(const Color &) { }
+ DEPRECATED const Color &get_diffuse() const { return color; }
+ DEPRECATED const Color &get_specular() const { return color; }
/** Sets the postion and orientation of the Light from a matrix. Negative Z
axis is used as the spot direction, other axes are ignored. */