#ifndef MSP_GL_LIGHT_H_
#define MSP_GL_LIGHT_H_
-#include <vector>
#include <msp/datafile/objectloader.h>
+#include <msp/geometry/angle.h>
#include "color.h"
#include "placeable.h"
+#include "vector.h"
namespace Msp {
namespace GL {
-class Matrix;
class ProgramData;
/**
private:
Color color;
+ Color transmittance;
Vector4 position;
Vector3 spot_dir;
Vector3 direction;
float spot_exp;
Geometry::Angle<float> spot_cutoff;
float attenuation[3];
+ unsigned generation;
public:
Light();
to shaders as light_sources[i].color. */
void set_color(const Color &);
- const Color &get_color() const { return color; }
+ /** Sets a multiplier on how much light actually reaches the target. Used
+ when modeling an atmosphere. */
+ void set_transmittance(const Color &);
- 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; }
+ const Color &get_color() const { return color; }
+ const Color &get_transmittance() const { return transmittance; }
/** Sets the postion and orientation of the Light from a matrix. Negative Z
axis is used as the spot direction, other axes are ignored. */
void set_attenuation(float, float, float);
const float *get_attenuation() const { return attenuation; }
- /** Updates a ProgramData object with the uniforms for the Light. A view
- matrix and light source index must be passed in. */
- void update_shader_data(ProgramData &, const Matrix &, unsigned) const;
+ unsigned get_generation() const { return generation; }
+
+ /** Updates a ProgramData object with the uniforms for the Light. A light
+ source index must be passed in. Primarily used by Lighting. */
+ void update_shader_data(ProgramData &, unsigned) const;
};
} // namespace GL