X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Fclipping.cpp;h=18b706e78b1b34e9205879acd51cf83d10ad9cbb;hp=c286b7e57677e7880a56908e3dda0f3ff90a15be;hb=a275d25eccad43716c5dcf91f8bc4af2a53c0445;hpb=a77629d781eeb789870470c5ebdbd4b691e1b138 diff --git a/source/core/clipping.cpp b/source/core/clipping.cpp index c286b7e5..18b706e7 100644 --- a/source/core/clipping.cpp +++ b/source/core/clipping.cpp @@ -20,7 +20,7 @@ unsigned Clipping::get_n_attach_points() void Clipping::attach(const ClipPlane &p) { - if(find(planes, &p)!=planes.end()) + if(find_member(planes, &p, &AttachedPlane::plane)!=planes.end()) return; if(planes.size()>=get_n_attach_points()) throw invalid_operation("Clipping::attach"); @@ -32,7 +32,7 @@ void Clipping::attach(const ClipPlane &p) void Clipping::detach(const ClipPlane &p) { - vector::iterator i = find(planes, &p); + vector::iterator i = find_member(planes, &p, &AttachedPlane::plane); if(i!=planes.end()) { planes.erase(i); @@ -45,14 +45,19 @@ void Clipping::detach(const ClipPlane &p) void Clipping::detach(unsigned i) { if(iupdate_shader_data(shdata, view_inverse, i); + if(planes[i].plane->get_generation()!=planes[i].generation) + { + planes[i].plane->update_shader_data(shdata, i); + planes[i].generation = planes[i].plane->get_generation(); + } + + return shdata; } void Clipping::bind() const