X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flight.cpp;h=a3b3d014c0a51a16762c7a82285f4a6a8960247c;hb=5c5d094255ae5b0a07f99392a5a099ad9c8e8e38;hp=d4b45aaf82cc66371c4a73f11174eaf7356af611;hpb=126161d1d44ab9503bc747d24a07b7b9d15e527a;p=libs%2Fgl.git diff --git a/source/light.cpp b/source/light.cpp index d4b45aaf..a3b3d014 100644 --- a/source/light.cpp +++ b/source/light.cpp @@ -1,7 +1,11 @@ #include +#include +#include #include "light.h" #include "lightunit.h" +#include "matrix.h" #include "misc.h" +#include "programdata.h" using namespace std; @@ -21,6 +25,12 @@ 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) @@ -97,8 +107,18 @@ void Light::set_attenuation(float c, float l, float q) update_parameter(ATTENUATION); } +void Light::update_shader_data(ProgramData &shdata, const Matrix &view_matrix, unsigned i) const +{ + string base = format("light_sources[%d]", i); + shdata.uniform(base+".position", view_matrix*position); + shdata.uniform(base+".diffuse", diffuse); + 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)) {