--- /dev/null
+/* $Id$
+
+This file is part of libmspgl
+Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
+#include "light.h"
+
+namespace Msp {
+namespace GL {
+
+Light::Light():
+ ambient(0),
+ diffuse(1),
+ specular(1),
+ x(0), y(0), z(1), w(0),
+ sdx(0), sdy(0), sdz(-1),
+ spot_exp(0),
+ spot_cutoff(180)
+{ }
+
+void Light::set_ambient(const Color &c)
+{
+ ambient=c;
+}
+
+void Light::set_diffuse(const Color &c)
+{
+ diffuse=c;
+}
+
+void Light::set_specular(const Color &c)
+{
+ specular=c;
+}
+
+void Light::set_position(float x_, float y_, float z_, float w_)
+{
+ x=x_;
+ y=y_;
+ z=z_;
+ w=w_;
+}
+
+void Light::apply()
+{
+ apply_to(current);
+}
+
+void Light::apply_to(unsigned l)
+{
+ l+=GL_LIGHT0;
+ glLightfv(l, GL_AMBIENT, &ambient.r);
+ glLightfv(l, GL_DIFFUSE, &diffuse.r);
+ glLightfv(l, GL_SPECULAR, &specular.r);
+ glLightfv(l, GL_POSITION, &x);
+}
+
+unsigned Light::current=0;
+
+} // namespace GL
+} // namespace Msp
--- /dev/null
+/* $Id$
+
+This file is part of libmspgl
+Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
+#ifndef MSP_GL_LIGHT_H_
+#define MSP_GL_LIGHT_H_
+
+#include "color.h"
+
+namespace Msp {
+namespace GL {
+
+class Light
+{
+private:
+ Color ambient;
+ Color diffuse;
+ Color specular;
+ float x, y, z, w;
+ float sdx, sdy, sdz;
+ float spot_exp;
+ float spot_cutoff;
+ float attenuation[3];
+
+ static unsigned current;
+
+public:
+ Light();
+ void set_ambient(const Color &c);
+ void set_diffuse(const Color &c);
+ void set_specular(const Color &c);
+ void set_position(float, float, float, float);
+ void apply();
+ void apply_to(unsigned);
+
+ static void activate(unsigned);
+};
+
+} // namespace GL
+} // namespace Msp
+
+#endif