X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Flight.cpp;h=e910411f276e27ebd305f507513177787caebb25;hp=4ba581e029f0083068e1517b1b870b4d7b552c18;hb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;hpb=e6bd08e977f3138bfcfa3a1b6cc45201c383e016 diff --git a/source/light.cpp b/source/light.cpp index 4ba581e0..e910411f 100644 --- a/source/light.cpp +++ b/source/light.cpp @@ -1,8 +1,6 @@ #include -#include #include #include "light.h" -#include "lightunit.h" #include "matrix.h" #include "misc.h" #include "programdata.h" @@ -25,44 +23,6 @@ Light::Light(): attenuation[2] = 0; } -Light::~Light() -{ - while(LightUnit *unit = LightUnit::find_unit(this)) - unbind_from(unit->get_index()); -} - -void Light::update_parameter(int mask, int index) const -{ - if(index<0) - { - LightUnit *unit = LightUnit::find_unit(this); - if(!unit) - return; - - index = unit->get_index(); - } - - GLenum l = GL_LIGHT0+index; - if(mask&DIFFUSE) - glLightfv(l, GL_DIFFUSE, &diffuse.r); - if(mask&SPECULAR) - glLightfv(l, GL_SPECULAR, &specular.r); - if(mask&POSITION) - glLightfv(l, GL_POSITION, &position.x); - if(mask&SPOT_DIR) - glLightfv(l, GL_SPOT_DIRECTION, &spot_dir.x); - if(mask&SPOT_EXP) - glLightf(l, GL_SPOT_EXPONENT, spot_exp); - if(mask&SPOT_CUTOFF) - glLightf(l, GL_SPOT_CUTOFF, spot_cutoff.degrees()); - if(mask&ATTENUATION) - { - glLightf(l, GL_CONSTANT_ATTENUATION, attenuation[0]); - glLightf(l, GL_LINEAR_ATTENUATION, attenuation[1]); - glLightf(l, GL_QUADRATIC_ATTENUATION, attenuation[2]); - } -} - void Light::update_matrix() { Vector3 up_dir; @@ -83,13 +43,11 @@ void Light::update_matrix() void Light::set_diffuse(const Color &c) { diffuse = c; - update_parameter(DIFFUSE); } void Light::set_specular(const Color &c) { specular = c; - update_parameter(SPECULAR); } void Light::set_matrix(const Matrix &m) @@ -98,14 +56,12 @@ void Light::set_matrix(const Matrix &m) position = matrix.column(3); spot_dir = normalize(-matrix.column(2).slice<3>(0)); direction = (position.w ? spot_dir : normalize(-position.slice<3>(0))); - update_parameter(POSITION|SPOT_DIR); update_matrix(); } void Light::set_position(const Vector4 &p) { position = p; - update_parameter(POSITION); if(!position.w) direction = normalize(-position.slice<3>(0)); update_matrix(); @@ -116,7 +72,6 @@ void Light::set_spot_direction(const Vector3 &d) spot_dir = normalize(d); if(position.w) direction = spot_dir; - update_parameter(SPOT_DIR); update_matrix(); } @@ -126,12 +81,6 @@ void Light::set_spot_exponent(float e) throw invalid_argument("Light::set_spot_exponent"); spot_exp = e; - update_parameter(SPOT_EXP); -} - -void Light::set_spot_cutoff(float c) -{ - set_spot_cutoff(Geometry::Angle::from_degrees(c)); } void Light::set_spot_cutoff(const Geometry::Angle &c) @@ -140,7 +89,6 @@ void Light::set_spot_cutoff(const Geometry::Angle &c) throw invalid_argument("Light::set_spot_cutoff"); spot_cutoff = c; - update_parameter(SPOT_CUTOFF); } void Light::disable_spot_cutoff() @@ -153,7 +101,6 @@ void Light::set_attenuation(float c, float l, float q) attenuation[0] = c; attenuation[1] = l; attenuation[2] = q; - update_parameter(ATTENUATION); } void Light::update_shader_data(ProgramData &shdata, const Matrix &view_matrix, unsigned i) const @@ -164,30 +111,6 @@ void Light::update_shader_data(ProgramData &shdata, const Matrix &view_matrix, u shdata.uniform(base+".specular", specular); } -void Light::bind_to(unsigned i) const -{ - static Require _req(MSP_legacy_features); - - LightUnit &unit = LightUnit::get_unit(i); - if(unit.set_light(this)) - { - enable(GL_LIGHT0+unit.get_index()); - update_parameter(-1, unit.get_index()); - } -} - -const Light *Light::current(unsigned i) -{ - return LightUnit::get_unit(i).get_light(); -} - -void Light::unbind_from(unsigned i) -{ - LightUnit &unit = LightUnit::get_unit(i); - if(unit.set_light(0)) - disable(GL_LIGHT0+unit.get_index()); -} - Light::Loader::Loader(Light &l): DataFile::ObjectLoader(l)