From 1ec5b48148e446cc198cc4567f84c5729e409248 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 28 Jul 2004 10:26:14 +0000 Subject: [PATCH] Fixed the flatten static transform visitor so that it checks to see if a drawable can be flattened or not. --- src/osgUtil/Optimizer.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/osgUtil/Optimizer.cpp b/src/osgUtil/Optimizer.cpp index a7099cd4c..9bbf57f04 100644 --- a/src/osgUtil/Optimizer.cpp +++ b/src/osgUtil/Optimizer.cpp @@ -506,6 +506,7 @@ class CollectLowestTransformsVisitor : public osg::NodeVisitor CollectLowestTransformsVisitor(Optimizer* optimizer=0): osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_PARENTS), + _transformFunctor(osg::Matrix()), _optimizer(optimizer) {} virtual void apply(osg::Node& node) @@ -575,8 +576,11 @@ class CollectLowestTransformsVisitor : public osg::NodeVisitor void disableTransform(osg::Transform* transform); bool removeTransforms(osg::Node* nodeWeCannotRemove); - inline bool isOperationPermissableForObject(const osg::Object* object) const + inline bool isOperationPermissableForObject(const osg::Object* object) { + const osg::Drawable* drawable = dynamic_cast(object); + if (drawable && !drawable->supports(_transformFunctor)) return false; + return _optimizer ? _optimizer->isOperationPermissableForObject(object,Optimizer::FLATTEN_STATIC_TRANSFORMS) : true; } @@ -661,7 +665,7 @@ class CollectLowestTransformsVisitor : public osg::NodeVisitor void disableObject(ObjectMap::iterator itr); void doTransform(osg::Object* obj,osg::Matrix& matrix); - + osgUtil::TransformAttributeFunctor _transformFunctor; Optimizer* _optimizer; TransformMap _transformMap; ObjectMap _objectMap;