diff --git a/include/osgUtil/Optimizer b/include/osgUtil/Optimizer index 44618b9a2..49d92a80d 100644 --- a/include/osgUtil/Optimizer +++ b/include/osgUtil/Optimizer @@ -261,6 +261,7 @@ class OSGUTIL_EXPORT Optimizer virtual void apply(osg::Node& geode); virtual void apply(osg::Geode& geode); virtual void apply(osg::Billboard& geode); + virtual void apply(osg::ProxyNode& node); virtual void apply(osg::Transform& transform); bool removeTransforms(osg::Node* nodeWeCannotRemove); diff --git a/src/osgUtil/Optimizer.cpp b/src/osgUtil/Optimizer.cpp index 208c23cfe..393dd53b2 100644 --- a/src/osgUtil/Optimizer.cpp +++ b/src/osgUtil/Optimizer.cpp @@ -675,6 +675,7 @@ class CollectLowestTransformsVisitor : public Optimizer::BaseOptimizerVisitor { // disable if object is a light point node. if (strcmp(node->className(),"LightPointNode")==0) return false; + if (dynamic_cast(node)) return false; return BaseOptimizerVisitor::isOperationPermissibleForObject(node); } @@ -1005,6 +1006,15 @@ void Optimizer::FlattenStaticTransformsVisitor::apply(osg::Node& node) traverse(node); } + +void Optimizer::FlattenStaticTransformsVisitor::apply(osg::ProxyNode& node) +{ + _excludedNodeSet.insert(&node); + + traverse(node); +} + + void Optimizer::FlattenStaticTransformsVisitor::apply(osg::Geode& geode) { if (!_transformStack.empty())