#include <msp/core/algorithm.h>
-#include <msp/gl/extensions/msp_clipping.h>
#include "clipping.h"
#include "clipplane.h"
#include "deviceinfo.h"
#include "error.h"
#include "matrix.h"
-#include "misc.h"
using namespace std;
throw invalid_operation("Clipping::attach");
planes.push_back(&p);
- if(current()==this)
- glEnable(GL_CLIP_PLANE0+planes.size()-1);
}
void Clipping::detach(const ClipPlane &p)
{
vector<AttachedPlane>::iterator i = find_member(planes, &p, &AttachedPlane::plane);
if(i!=planes.end())
- {
planes.erase(i);
- if(current()==this)
- disable(GL_CLIP_PLANE0+planes.size());
-
- }
}
void Clipping::detach(unsigned i)
return shdata;
}
-void Clipping::bind() const
-{
- static Require _req(MSP_clipping);
-
- const Clipping *old = current();
- if(!set_current(this))
- return;
-
- for(unsigned i=0; i<planes.size(); ++i)
- enable(GL_CLIP_PLANE0+i);
-
- if(old)
- {
- for(unsigned i=planes.size(); i<old->planes.size(); ++i)
- disable(GL_CLIP_PLANE0+i);
- }
-}
-
-void Clipping::unbind()
-{
- const Clipping *old = current();
- if(!set_current(0))
- return;
-
- for(unsigned i=0; i<old->planes.size(); ++i)
- disable(GL_CLIP_PLANE0+i);
-}
-
} // namespace GL
} // namespace Msp