]> git.tdb.fi Git - libs/gl.git/blobdiff - source/clipping.cpp
Make ambient occlusion edge detection threshold adjustable
[libs/gl.git] / source / clipping.cpp
index add7bba68f698cd798511966226200361ee83240..6508ecf7f695306df3e76cf4e7f03689e00eee8b 100644 (file)
@@ -1,3 +1,4 @@
+#include <msp/gl/extensions/msp_clipping.h>
 #include <msp/gl/extensions/msp_legacy_features.h>
 #include "clipping.h"
 #include "clipplane.h"
@@ -55,8 +56,12 @@ void Clipping::update_shader_data(ProgramData &shdata, const Matrix &view_matrix
 
 void Clipping::bind(bool legacy) const
 {
+       static Require _req(MSP_clipping);
        if(legacy)
-               static Require _req(MSP_legacy_features);
+               static Require _req2(MSP_legacy_features);
+       
+       if(legacy!=bound_with_legacy)
+               unbind();
 
        const Clipping *old = current();
        if(!set_current(this))
@@ -99,6 +104,22 @@ void Clipping::bind(bool legacy) const
 
 void Clipping::unbind()
 {
+       const Clipping *old = current();
+       if(!set_current(0))
+               return;
+
+       if(bound_with_legacy)
+       {
+               for(unsigned i=0; i<old->planes.size(); ++i)
+                       if(old->planes[i])
+                               ClipPlane::unbind_from(i);
+       }
+       else
+       {
+               for(unsigned i=0; i<old->planes.size(); ++i)
+                       if(old->planes[i])
+                               disable(GL_CLIP_PLANE0+i);
+       }
 }
 
 } // namespace GL