]> git.tdb.fi Git - libs/gl.git/blobdiff - source/materials/light.h
Some more cleanup of includes and forward declarations
[libs/gl.git] / source / materials / light.h
index d097d04ae435157ebb1c4ddd18cc2bd5857d37d0..a6ffd16efd3701d456cb3b0d3578b0ee558d6f6b 100644 (file)
@@ -1,15 +1,15 @@
 #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;
 
 /**
@@ -44,12 +44,14 @@ public:
 
 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();
@@ -62,7 +64,12 @@ public:
        to shaders as light_sources[i].color. */
        void set_color(const Color &);
 
+       /** Sets a multiplier on how much light actually reaches the target.  Used
+       when modeling an atmosphere. */
+       void set_transmittance(const Color &);
+
        const Color &get_color() const { return color; }
+       const Color &get_transmittance() const { return transmittance; }
 
        DEPRECATED void set_diffuse(const Color &c) { set_color(c); }
        DEPRECATED void set_specular(const Color &) { }
@@ -101,9 +108,11 @@ public:
        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