]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/clipping.cpp
Use persistent uniform blocks for Camera, Lighting and Clipping
[libs/gl.git] / source / core / clipping.cpp
index c286b7e57677e7880a56908e3dda0f3ff90a15be..18b706e78b1b34e9205879acd51cf83d10ad9cbb 100644 (file)
@@ -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<const ClipPlane *>::iterator i = find(planes, &p);
+       vector<AttachedPlane>::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(i<planes.size())
-               detach(*planes[i]);
+               detach(*planes[i].plane);
 }
 
-void Clipping::update_shader_data(ProgramData &shdata, const Matrix &view_matrix) const
+const ProgramData &Clipping::get_shader_data() const
 {
-       Matrix view_inverse = invert(view_matrix);
        for(unsigned i=0; i<planes.size(); ++i)
-               planes[i]->update_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