Changeset 3203
- Timestamp:
- 07/29/04 12:13:02 (9 years ago)
- Location:
- OpenSceneGraph/trunk
- Files:
-
- 2 modified
-
include/osgUtil/Optimizer (modified) (2 diffs)
-
src/osgUtil/Optimizer.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/include/osgUtil/Optimizer
r3172 r3203 126 126 _optimizer(optimizer) {} 127 127 128 virtual void apply(osg::Node& geode); 128 129 virtual void apply(osg::Geode& geode); 129 130 virtual void apply(osg::Billboard& geode); … … 143 144 typedef std::set<osg::Drawable*> DrawableSet; 144 145 typedef std::set<osg::Billboard*> BillboardSet; 146 typedef std::set<osg::Node* > NodeSet; 145 147 typedef std::set<osg::Transform*> TransformSet; 146 148 147 149 Optimizer* _optimizer; 148 150 TransformStack _transformStack; 151 NodeSet _excludedNodeSet; 149 152 DrawableSet _drawableSet; 150 153 BillboardSet _billboardSet; -
OpenSceneGraph/trunk/src/osgUtil/Optimizer.cpp
r3197 r3203 549 549 550 550 551 void collectDataFor(osg::Node* node) 552 { 553 _currentObjectList.push_back(node); 554 555 node->accept(*this); 556 557 _currentObjectList.pop_back(); 558 } 559 551 560 void collectDataFor(osg::Billboard* billboard) 552 561 { … … 579 588 inline bool isOperationPermissableForObject(const osg::Object* object) 580 589 { 590 // disable if cannot apply transform functor. 581 591 const osg::Drawable* drawable = dynamic_cast<const osg::Drawable*>(object); 582 592 if (drawable && !drawable->supports(_transformFunctor)) return false; 583 593 594 // disable if object is a light point node. 595 if (strcmp(object->className(),"LightPointNode")==0) return false; 596 584 597 return _optimizer ? _optimizer->isOperationPermissableForObject(object,Optimizer::FLATTEN_STATIC_TRANSFORMS) : true; 585 598 } … … 904 917 } 905 918 919 void 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 906 928 void Optimizer::FlattenStaticTransformsVisitor::apply(osg::Geode& geode) 907 929 { 908 909 930 if (!_transformStack.empty()) 910 931 { … … 945 966 { 946 967 CollectLowestTransformsVisitor cltv(_optimizer); 968 969 for(NodeSet::iterator nitr=_excludedNodeSet.begin(); 970 nitr!=_excludedNodeSet.end(); 971 ++nitr) 972 { 973 cltv.collectDataFor(*nitr); 974 } 947 975 948 976 for(DrawableSet::iterator ditr=_drawableSet.begin();
