X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fclipping.cpp;fp=source%2Fclipping.cpp;h=3bdeee3ca8b3367624504f9815338f1810c4dcb9;hp=6508ecf7f695306df3e76cf4e7f03689e00eee8b;hb=a40fc85277dba5c34402a0e703d038efd30cc57b;hpb=2fa1bb084e54af7134b44d3ee7512056e28de67e diff --git a/source/clipping.cpp b/source/clipping.cpp index 6508ecf7..3bdeee3c 100644 --- a/source/clipping.cpp +++ b/source/clipping.cpp @@ -1,8 +1,6 @@ #include -#include #include "clipping.h" #include "clipplane.h" -#include "clipunit.h" #include "matrix.h" #include "misc.h" @@ -11,11 +9,16 @@ using namespace std; namespace Msp { namespace GL { -bool Clipping::bound_with_legacy = false; +unsigned Clipping::get_n_attach_points() +{ + static Require _req(MSP_clipping); + static int count = get_i(GL_MAX_CLIP_PLANES); + return count; +} void Clipping::attach(unsigned i, const ClipPlane &p) { - if(i>=ClipUnit::get_n_units()) + if(i>=get_n_attach_points()) throw out_of_range("Clipping::attach"); if(i>=planes.size()) @@ -23,12 +26,7 @@ void Clipping::attach(unsigned i, const ClipPlane &p) planes[i] = &p; if(current()==this) - { - if(bound_with_legacy) - p.bind_to(i); - else - glEnable(GL_CLIP_PLANE0+i); - } + glEnable(GL_CLIP_PLANE0+i); } void Clipping::detach(unsigned i) @@ -38,12 +36,7 @@ void Clipping::detach(unsigned i) planes[i] = 0; if(current()==this) - { - if(bound_with_legacy) - ClipPlane::unbind_from(i); - else - disable(GL_CLIP_PLANE0+i); - } + disable(GL_CLIP_PLANE0+i); } void Clipping::update_shader_data(ProgramData &shdata, const Matrix &view_matrix) const @@ -54,51 +47,26 @@ void Clipping::update_shader_data(ProgramData &shdata, const Matrix &view_matrix planes[i]->update_shader_data(shdata, view_inverse, i); } -void Clipping::bind(bool legacy) const +void Clipping::bind() const { static Require _req(MSP_clipping); - if(legacy) - static Require _req2(MSP_legacy_features); - - if(legacy!=bound_with_legacy) - unbind(); const Clipping *old = current(); if(!set_current(this)) return; - bound_with_legacy = legacy; - if(legacy) + for(unsigned i=0; ibind_to(i); - else - ClipPlane::unbind_from(i); - } - - if(old) - { - for(unsigned i=planes.size(); iplanes.size(); ++i) - ClipPlane::unbind_from(i); - } + if(planes[i]) + enable(GL_CLIP_PLANE0+i); + else + disable(GL_CLIP_PLANE0+i); } - else + + if(old) { - for(unsigned i=0; iplanes.size(); ++i) - disable(GL_CLIP_PLANE0+i); - } + for(unsigned i=planes.size(); iplanes.size(); ++i) + disable(GL_CLIP_PLANE0+i); } } @@ -108,18 +76,9 @@ void Clipping::unbind() 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); - } + for(unsigned i=0; iplanes.size(); ++i) + if(old->planes[i]) + disable(GL_CLIP_PLANE0+i); } } // namespace GL