X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flight.cpp;h=4b2e289c6c5d7c1b21ebb7f749a0a963523412e4;hb=ab59f5a9e66b3fc7872ad96ec7949940189f0819;hp=b523fe365124e9c8f52cba0bd4c9edbbaa8e2f07;hpb=41339bc44d076569c680b2c24c75b30ef1254c1b;p=libs%2Fgl.git diff --git a/source/light.cpp b/source/light.cpp index b523fe36..4b2e289c 100644 --- a/source/light.cpp +++ b/source/light.cpp @@ -1,11 +1,4 @@ -/* $Id$ - -This file is part of libmspgl -Copyright © 2007 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - -#include "except.h" +#include #include "light.h" #include "misc.h" @@ -14,6 +7,9 @@ using namespace std; namespace Msp { namespace GL { +unsigned Light::current_unit = 0; +vector Light::current_lights(1); + Light::Light(): ambient(0), diffuse(1), @@ -23,58 +19,58 @@ Light::Light(): spot_exp(0), spot_cutoff(180) { - attenuation[0]=1; - attenuation[1]=0; - attenuation[2]=0; + attenuation[0] = 1; + attenuation[1] = 0; + attenuation[2] = 0; } void Light::set_ambient(const Color &c) { - ambient=c; + ambient = c; } void Light::set_diffuse(const Color &c) { - diffuse=c; + diffuse = c; } void Light::set_specular(const Color &c) { - specular=c; + specular = c; } void Light::set_position(const Vector4 &p) { - position=p; + position = p; } void Light::set_spot_direction(const Vector3 &d) { - spot_dir=d; + spot_dir = d; } void Light::set_spot_exponent(float e) { - spot_exp=e; + spot_exp = e; } void Light::set_spot_cutoff(float c) { - spot_cutoff=c; + spot_cutoff = c; } void Light::set_attenuation(float c, float l, float q) { - attenuation[0]=c; - attenuation[1]=l; - attenuation[2]=q; + attenuation[0] = c; + attenuation[1] = l; + attenuation[2] = q; } void Light::bind() const { if(current_lights[current_unit]!=this) { - GLenum l=GL_LIGHT0+current_unit; + GLenum l = GL_LIGHT0+current_unit; enable(l); glLightfv(l, GL_AMBIENT, &ambient.r); glLightfv(l, GL_DIFFUSE, &diffuse.r); @@ -86,7 +82,7 @@ void Light::bind() const glLightf(l, GL_CONSTANT_ATTENUATION, attenuation[0]); glLightf(l, GL_LINEAR_ATTENUATION, attenuation[1]); glLightf(l, GL_QUADRATIC_ATTENUATION, attenuation[2]); - current_lights[current_unit]=this; + current_lights[current_unit] = this; } } @@ -98,15 +94,15 @@ void Light::bind_to(unsigned i) const void Light::activate(unsigned i) { - static unsigned max_lights=get_i(GL_MAX_LIGHTS); + static unsigned max_lights = get_i(GL_MAX_LIGHTS); if(i>=max_lights) - throw InvalidParameterValue("Light unit index out of range"); + throw out_of_range("Light::activate"); if(i>=current_lights.size()) current_lights.resize(i+1); - current_unit=i; + current_unit = i; } void Light::unbind() @@ -114,12 +110,15 @@ void Light::unbind() if(current_lights[current_unit]) { disable(GL_LIGHT0+current_unit); - current_lights[current_unit]=0; + current_lights[current_unit] = 0; } } -unsigned Light::current_unit=0; -vector Light::current_lights(1); +void Light::unbind_from(unsigned i) +{ + activate(i); + unbind(); +} } // namespace GL } // namespace Msp