16 #ifndef OPENMW_OSGUTIL_OPTIMIZER
17 #define OPENMW_OSGUTIL_OPTIMIZER
19 #include <osg/NodeVisitor>
21 #include <osg/Geometry>
22 #include <osg/Transform>
23 #include <osg/Texture2D>
41 osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN),
45 setNodeMaskOverride(0xffffffff);
126 virtual void optimize(osg::Node* node,
unsigned int options);
173 else return 0xffffffff;
223 if (drawable->getUserData())
return false;
224 if (drawable->getUpdateCallback())
return false;
225 if (drawable->getEventCallback())
return false;
226 if (drawable->getCullCallback())
return false;
235 if (node->getUserData())
return false;
236 if (node->getUpdateCallback())
return false;
237 if (node->getEventCallback())
return false;
238 if (node->getCullCallback())
return false;
239 if (node->getNumDescriptions()>0)
return false;
240 if (node->getStateSet())
return false;
241 if (node->getNodeMask()!=0xffffffff)
return false;
270 virtual void apply(osg::Node& geode);
271 virtual void apply(osg::Drawable& drawable);
272 virtual void apply(osg::Billboard& geode);
273 virtual void apply(osg::Transform& transform);
301 virtual void apply(osg::MatrixTransform& transform);
323 virtual void apply(osg::Group& group);
340 virtual void apply(osg::Group& group);
341 virtual void apply(osg::Transform& transform);
342 virtual void apply(osg::LOD& lod);
361 virtual void apply(osg::Group& group);
362 virtual void apply(osg::LOD& lod);
388 virtual void apply(osg::Group& group);
389 virtual void apply(osg::Billboard&) { }
395 static bool mergeGeometry(osg::Geometry& lhs,osg::Geometry& rhs);
397 static bool mergePrimitive(osg::DrawArrays& lhs,osg::DrawArrays& rhs);
398 static bool mergePrimitive(osg::DrawArrayLengths& lhs,osg::DrawArrayLengths& rhs);
399 static bool mergePrimitive(osg::DrawElementsUByte& lhs,osg::DrawElementsUByte& rhs);
400 static bool mergePrimitive(osg::DrawElementsUShort& lhs,osg::DrawElementsUShort& rhs);
401 static bool mergePrimitive(osg::DrawElementsUInt& lhs,osg::DrawElementsUInt& rhs);
414 return _optimizer ? _optimizer->isOperationPermissibleForObject(
object,_operationType) :
true;
419 return _optimizer ? _optimizer->isOperationPermissibleForObject(
object,_operationType) :
true;
424 return _optimizer ? _optimizer->isOperationPermissibleForObject(
object,_operationType) :
true;
429 return _optimizer ? _optimizer->isOperationPermissibleForObject(
object,_operationType) :
true;
virtual bool isOperationPermissibleForObjectImplementation(const Optimizer *optimizer, const osg::StateSet *stateset, unsigned int option) const
Definition: optimizer.hpp:132
NodeList _redundantNodeList
Definition: optimizer.hpp:318
Definition: optimizer.hpp:76
static bool geometryContainsSharedArrays(osg::Geometry &geom)
Definition: optimizer.cpp:1532
PermissibleOptimizationsMap _permissibleOptimizationsMap
Definition: optimizer.hpp:253
Definition: optimizer.hpp:351
bool isOperationPermissibleForObject(const osg::Drawable *object, unsigned int option) const
Definition: optimizer.hpp:193
unsigned int _targetMaximumNumberOfVertices
Definition: optimizer.hpp:405
const IsOperationPermissibleForObjectCallback * getIsOperationPermissibleForObjectCallback() const
Definition: optimizer.hpp:161
Definition: optimizer.hpp:88
Definition: optimizer.hpp:130
Definition: optimizer.hpp:36
void reset()
Definition: optimizer.cpp:48
Definition: optimizer.hpp:104
OptimizationOptions
Definition: optimizer.hpp:71
void num(char i, bool last)
Definition: gen_iconv.cpp:12
void popStateSet()
Definition: optimizer.cpp:1053
bool isOperationPermissibleForObjectImplementation(const osg::Drawable *drawable, unsigned int option) const
Definition: optimizer.hpp:219
bool isOperationPermissibleForObject(const osg::Node *object, unsigned int option) const
Definition: optimizer.hpp:201
Definition: optimizer.hpp:81
Definition: optimizer.hpp:75
RemoveEmptyNodesVisitor(Optimizer *optimizer=0)
Definition: optimizer.hpp:320
virtual bool isOperationPermissibleForObjectImplementation(const Optimizer *optimizer, const osg::Node *node, unsigned int option) const
Definition: optimizer.hpp:147
Definition: optimizer.hpp:82
void removeEmptyNodes()
Definition: optimizer.cpp:755
Definition: optimizer.hpp:79
Definition: optimizer.hpp:87
std::map< const osg::Object *, unsigned int > PermissibleOptimizationsMap
Definition: optimizer.hpp:252
virtual void apply(osg::Group &group)
Definition: optimizer.cpp:1865
Definition: optimizer.hpp:92
Definition: optimizer.hpp:330
Definition: optimizer.hpp:80
Definition: optimizer.hpp:365
static bool mergePrimitive(osg::DrawArrays &lhs, osg::DrawArrays &rhs)
Definition: optimizer.cpp:1808
Definition: optimizer.hpp:83
static bool mergeGeometry(osg::Geometry &lhs, osg::Geometry &rhs)
Definition: optimizer.cpp:1633
Definition: optimizer.hpp:73
unsigned int _operationType
Definition: optimizer.hpp:56
Definition: optimizer.hpp:89
virtual void apply(osg::Group &group)
Definition: optimizer.cpp:1078
std::set< osg::Node * > NodeList
Definition: optimizer.hpp:334
bool isOperationPermissibleForObjectImplementation(const osg::StateAttribute *attribute, unsigned int option) const
Definition: optimizer.hpp:214
virtual ~Optimizer()
Definition: optimizer.hpp:69
bool isOperationPermissibleForObjectImplementation(const osg::StateSet *stateset, unsigned int option) const
Definition: optimizer.hpp:209
std::set< osg::Node * > NodeList
Definition: optimizer.hpp:317
Optimizer * _optimizer
Definition: optimizer.hpp:55
MergeGeometryVisitor(Optimizer *optimizer=0)
default to traversing all children.
Definition: optimizer.hpp:370
Definition: optimizer.hpp:63
bool isOperationPermissible(osg::Node &node)
Definition: optimizer.cpp:793
Definition: optimizer.hpp:85
Definition: optimizer.hpp:90
virtual bool isOperationPermissibleForObjectImplementation(const Optimizer *optimizer, const osg::StateAttribute *attribute, unsigned int option) const
Definition: optimizer.hpp:137
void removeRedundantNodes()
Definition: optimizer.cpp:839
Definition: optimizer.hpp:86
Optimizer()
Definition: optimizer.hpp:68
Definition: optimizer.hpp:312
virtual void apply(osg::Billboard &)
Definition: optimizer.hpp:389
void setTargetMaximumNumberOfVertices(unsigned int num)
Definition: optimizer.hpp:374
void setIsOperationPermissibleForObjectCallback(IsOperationPermissibleForObjectCallback *callback)
Definition: optimizer.hpp:155
std::vector< osg::StateSet * > _stateSetStack
Definition: optimizer.hpp:406
BaseOptimizerVisitor(Optimizer *optimizer, unsigned int operation)
Definition: optimizer.hpp:40
bool isOperationPermissibleForObjectImplementation(const osg::Node *node, unsigned int option) const
Definition: optimizer.hpp:231
void pushStateSet(osg::StateSet *stateSet)
Definition: optimizer.cpp:1047
Definition: optimizer.hpp:94
NodeList _redundantNodeList
Definition: optimizer.hpp:335
bool isOperationPermissibleForObject(const osg::StateSet *object, unsigned int option) const
Definition: optimizer.hpp:177
unsigned int getTargetMaximumNumberOfVertices() const
Definition: optimizer.hpp:379
Definition: optimizer.hpp:74
bool _allowedToMerge
Definition: optimizer.hpp:407
virtual void apply(osg::Group &group)
Definition: optimizer.cpp:740
bool mergeGroup(osg::Group &group)
Definition: optimizer.cpp:1092
bool isOperationPermissible(osg::Group &node)
Definition: optimizer.cpp:1850
Definition: optimizer.hpp:93
unsigned int getPermissibleOptimizationsForObject(const osg::Object *object) const
Definition: optimizer.hpp:169
osg::ref_ptr< IsOperationPermissibleForObjectCallback > _isOperationPermissibleForObjectCallback
Definition: optimizer.hpp:250
virtual void apply(osg::Group &group)
Definition: optimizer.cpp:810
virtual bool isOperationPermissibleForObjectImplementation(const Optimizer *optimizer, const osg::Drawable *drawable, unsigned int option) const
Definition: optimizer.hpp:142
void checkAllowedToMerge()
Definition: optimizer.cpp:1059
Definition: optimizer.hpp:78
bool isOperationPermissibleForObject(const osg::StateSet *object) const
Definition: optimizer.hpp:412
virtual void optimize(osg::Node *node, unsigned int options)
Definition: optimizer.cpp:52
Definition: optimizer.hpp:77
MergeGroupsVisitor(SceneUtil::Optimizer *optimizer)
Definition: optimizer.hpp:354
Definition: optimizer.hpp:84
IsOperationPermissibleForObjectCallback * getIsOperationPermissibleForObjectCallback()
Definition: optimizer.hpp:158
bool isOperationPermissibleForObject(const osg::StateAttribute *object, unsigned int option) const
Definition: optimizer.hpp:185
void setPermissibleOptimizationsForObject(const osg::Object *object, unsigned int options)
Definition: optimizer.hpp:164
Definition: optimizer.hpp:91
RemoveRedundantNodesVisitor(Optimizer *optimizer=0)
Definition: optimizer.hpp:337