]> git.tdb.fi Git - libs/gl.git/blobdiff - source/lighting.h
Rework ProgramData to do less unnecessary work
[libs/gl.git] / source / lighting.h
index 85d5fb0406c877cb0d89e855cc6d6cff2b90a384..063bbf2b4eb5a5f81bb75a6931ba5833d603b377 100644 (file)
@@ -1,46 +1,44 @@
-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2008  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef MSP_GL_LIGHTING_H_
 #define MSP_GL_LIGHTING_H_
 
 #include <vector>
+#include <msp/geometry/angle.h>
+#include "bindable.h"
 #include "color.h"
 #include "gl.h"
+#include "programdata.h"
 
 namespace Msp {
 namespace GL {
 
 class Light;
 
-enum
-{
-       LIGHTING = GL_LIGHTING
-};
-
 /**
 Encapsulates global lighting parameters and a number of individual lights.
 */
-class Lighting
+class Lighting: public Bindable<Lighting>
 {
 private:
        Color ambient;
+       Color sky_color;
+       Vector3 sky_direction;
+       Geometry::Angle<float> horizon_angle;
        std::vector<const Light *> lights;
 
-       static const Lighting *current;
-
 public:
        Lighting();
 
        void set_ambient(const Color &);
        const Color &get_ambient() const { return ambient; }
 
+       void set_sky_color(const Color &);
+       void set_sky_direction(const Vector3 &);
+       void set_horizon_angle(const Geometry::Angle<float> &);
+
        void attach(unsigned, const Light &);
        void detach(unsigned);
+
+       void update_shader_data(ProgramData &, const Matrix &) const;
        void bind() const;
 
        static void unbind();