Changeset 3203

Show
Ignore:
Timestamp:
07/29/04 12:13:02 (10 years ago)
Author:
robert
Message:

Added detection and disabling of flattening of static transforms which a
LightPointNode? exists in the scene graph.

Location:
OpenSceneGraph/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/include/osgUtil/Optimizer

    r3172 r3203  
    126126                    _optimizer(optimizer) {} 
    127127 
     128                virtual void apply(osg::Node& geode); 
    128129                virtual void apply(osg::Geode& geode); 
    129130                virtual void apply(osg::Billboard& geode); 
     
    143144                typedef std::set<osg::Drawable*>                    DrawableSet; 
    144145                typedef std::set<osg::Billboard*>                   BillboardSet; 
     146                typedef std::set<osg::Node* >                       NodeSet; 
    145147                typedef std::set<osg::Transform*>                   TransformSet; 
    146148                 
    147149                Optimizer*      _optimizer; 
    148150                TransformStack  _transformStack; 
     151                NodeSet         _excludedNodeSet; 
    149152                DrawableSet     _drawableSet; 
    150153                BillboardSet    _billboardSet; 
  • OpenSceneGraph/trunk/src/osgUtil/Optimizer.cpp

    r3197 r3203  
    549549         
    550550 
     551        void collectDataFor(osg::Node* node) 
     552        { 
     553            _currentObjectList.push_back(node); 
     554             
     555            node->accept(*this); 
     556             
     557            _currentObjectList.pop_back(); 
     558        } 
     559 
    551560        void collectDataFor(osg::Billboard* billboard) 
    552561        { 
     
    579588        inline bool isOperationPermissableForObject(const osg::Object* object) 
    580589        { 
     590            // disable if cannot apply transform functor. 
    581591            const osg::Drawable* drawable = dynamic_cast<const osg::Drawable*>(object); 
    582592            if (drawable && !drawable->supports(_transformFunctor)) return false; 
    583593             
     594            // disable if object is a light point node. 
     595            if (strcmp(object->className(),"LightPointNode")==0) return false; 
     596 
    584597            return _optimizer ? _optimizer->isOperationPermissableForObject(object,Optimizer::FLATTEN_STATIC_TRANSFORMS) :  true;  
    585598        } 
     
    904917} 
    905918 
     919void Optimizer::FlattenStaticTransformsVisitor::apply(osg::Node& node) 
     920{ 
     921    if (strcmp(node.className(),"LightPointNode")==0) 
     922    { 
     923        _excludedNodeSet.insert(&node); 
     924    } 
     925    traverse(node); 
     926} 
     927 
    906928void Optimizer::FlattenStaticTransformsVisitor::apply(osg::Geode& geode) 
    907929{ 
    908  
    909930    if (!_transformStack.empty()) 
    910931    { 
     
    945966{ 
    946967    CollectLowestTransformsVisitor cltv(_optimizer); 
     968 
     969    for(NodeSet::iterator nitr=_excludedNodeSet.begin(); 
     970        nitr!=_excludedNodeSet.end(); 
     971        ++nitr) 
     972    { 
     973        cltv.collectDataFor(*nitr); 
     974    } 
    947975 
    948976    for(DrawableSet::iterator ditr=_drawableSet.begin();