Fixed a bug in the Optimizer::RemoveDuplicateNodesVisitor which was prevent
removal of node which could have been removed. Added so extra convinience methods to ClippingVolume and utilized them in the CullVisitor to push and pop only culling planes that are active.
This commit is contained in:
@@ -169,8 +169,13 @@ void CullVisitor::reset()
|
||||
|
||||
void CullVisitor::pushClippingVolume()
|
||||
{
|
||||
_modelviewClippingVolumeStack.push_back(_projectionClippingVolumeStack.back());
|
||||
if (!_modelviewStack.empty()) _modelviewClippingVolumeStack.back().transformProvidingInverse(*_modelviewStack.back());
|
||||
_modelviewClippingVolumeStack.push_back(osg::ClippingVolume());
|
||||
osg::ClippingVolume& cv = _modelviewClippingVolumeStack.back();
|
||||
//cv.set(_projectionClippingVolumeStack.back());
|
||||
cv.set(_projectionClippingVolumeStack.back(),_cullingModeStack.back());
|
||||
_cullingModeStack.push_back(cv.getLocalMask() | (_cullingModeStack.back()&SMALL_FEATURE_CULLING));
|
||||
|
||||
if (!_modelviewStack.empty()) cv.transformProvidingInverse(*_modelviewStack.back());
|
||||
|
||||
_MVPW_Stack.push_back(0L);
|
||||
|
||||
@@ -181,7 +186,8 @@ void CullVisitor::popClippingVolume()
|
||||
{
|
||||
_modelviewClippingVolumeStack.pop_back();
|
||||
_MVPW_Stack.pop_back();
|
||||
|
||||
_cullingModeStack.pop_back();
|
||||
|
||||
_windowToModelFactorDirty = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -527,7 +527,7 @@ void Optimizer::FlattenStaticTransformsVisitor::removeTransforms()
|
||||
|
||||
osg::ref_ptr<osg::Transform> transform = titr->first;
|
||||
osg::ref_ptr<osg::Group> group = osgNew osg::Group;
|
||||
|
||||
group->setDataVariance(osg::Object::STATIC);
|
||||
for(unsigned int i=0;i<transform->getNumChildren();++i)
|
||||
{
|
||||
for(unsigned int j=0;j<transform->getNumParents();++j)
|
||||
@@ -562,7 +562,7 @@ void Optimizer::RemoveRedundentNodesVisitor::apply(osg::Group& group)
|
||||
if (!group.getUserData() &&
|
||||
!group.getAppCallback() &&
|
||||
!group.getStateSet() &&
|
||||
group.getNodeMask()!=0xffffffff)
|
||||
group.getNodeMask()==0xffffffff)
|
||||
{
|
||||
_redundentNodeList.insert(&group);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user