X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fclipping.cpp;h=6508ecf7f695306df3e76cf4e7f03689e00eee8b;hp=add7bba68f698cd798511966226200361ee83240;hb=77ad5a1a89aa43d9a3c8c58abff1ae184510cec6;hpb=9b685afdaac3952bab7a49410bdf7f6b3cf67c6f diff --git a/source/clipping.cpp b/source/clipping.cpp index add7bba6..6508ecf7 100644 --- a/source/clipping.cpp +++ b/source/clipping.cpp @@ -1,3 +1,4 @@ +#include #include #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; iplanes.size(); ++i) + if(old->planes[i]) + ClipPlane::unbind_from(i); + } + else + { + for(unsigned i=0; iplanes.size(); ++i) + if(old->planes[i]) + disable(GL_CLIP_PLANE0+i); + } } } // namespace GL