*
*/
+#ifdef HAVE_CONFIG_H
+# include <simgear_config.h>
+#endif
+
#include "SGClipGroup.hxx"
#include <osg/ClipPlane>
{
osg::State* state = renderInfo.getState();
- glPushAttrib(GL_TRANSFORM_BIT);
-
state->applyModelViewMatrix(mModelView.get());
- for (unsigned i = 0; i < mClipPlanes.size(); ++i)
- mClipPlanes[i]->apply(*state);
+ for (unsigned i = 0; i < mClipPlanes.size(); ++i) {
+ osg::StateAttribute::GLMode planeNum;
+ planeNum = GL_CLIP_PLANE0 + mClipPlanes[i]->getClipPlaneNum();
+ state->applyMode(planeNum, false);
+ glClipPlane(planeNum, mClipPlanes[i]->getClipPlane().ptr());
+ }
osgUtil::RenderBin::drawImplementation(renderInfo, previous);
-
- glPopAttrib();
}
virtual void reset()
}
};
+#if 0
static osg::Vec4d clipPlane(const osg::Vec2& p0, const osg::Vec2& p1)
{
osg::Vec2d v(p1[0] - p0[0], p1[1] - p0[1]);
return osg::Vec4d(v[1], -v[0], 0, v[0]*p0[1] - v[1]*p0[0]);
}
+#endif
SGClipGroup::SGClipGroup()
{
setCullCallback(new CullCallback);
}
+SGClipGroup::SGClipGroup(const SGClipGroup& clip, const osg::CopyOp& copyop) :
+ osg::Group(clip, copyop)
+{
+ for (unsigned i = 0; i < mClipPlanes.size(); ++i) {
+ osg::StateAttribute* sa = copyop(mClipPlanes[i].get());
+ mClipPlanes.push_back(static_cast<osg::ClipPlane*>(sa));
+ }
+}
+
osg::BoundingSphere
SGClipGroup::computeBound() const
{