14#ifndef OSGUTIL_OPTIMIZER
15#define OSGUTIL_OPTIMIZER
45 inline bool isOperationPermissibleForObject(
const osg::StateSet*
object)
const;
47 inline bool isOperationPermissibleForObject(
const osg::Drawable*
object)
const;
48 inline bool isOperationPermissibleForObject(
const osg::Node*
object)
const;
180 else return 0xffffffff;
448 bool combineStaticState,
449 bool combineUnspecifiedState,
567 bool divide(
unsigned int maxNumTreesPerCell=8);
603 bool changeClientImageStorage,
bool valueClientImageStorage,
604 bool changeAnisotropy,
float valueAnisotropy,
723 Atlas(
int width,
int height,
int margin):
774 return src1->_image->t() > src2->_image->t();
777 void completeRow(
unsigned int indexAtlas);
846 bool changeVertexArrayObject,
bool valueVertexArrayObject,
847 bool changeDisplayList,
bool valueDisplayList,
The core osg library provides the basic scene graph classes such as Nodes, State and Drawables,...
Definition AlphaFunc:19
Matrixd Matrix
Definition Matrix:27
The osgUtil library provides general purpose utility classes such as update, cull and draw traverses,...
Definition NodeVisitor:25
Billboard is a derived form of Geode that orients its osg::Drawable children to face the eye point.
Definition Billboard:27
Pure virtual base class for drawable geometry.
Definition Drawable:89
A Geode is a "geometry node", that is, a leaf node on the scene graph that can have "renderable thing...
Definition Geode:29
General group node which maintains a list of children.
Definition Group:29
Image class for encapsulating the storage texture image data.
Definition Image:179
LOD - Level Of Detail group node which allows switching between children depending on distance from e...
Definition LOD:36
MatrixTransform - is a subclass of Transform which has an osg::Matrix which represents a 4x4 transfor...
Definition MatrixTransform:26
Base class for all internal nodes in the scene graph.
Definition Node:72
unsigned int getNumDescriptions() const
Get the number of descriptions of the node.
NodeMask getNodeMask() const
Get the node Mask.
Definition Node:367
osg::StateSet * getStateSet()
Return the node's StateSet.
Definition Node:382
Callback * getUpdateCallback()
Get update node callback, called during update traversal.
Definition Node:211
Callback * getCullCallback()
Get cull node callback, called during cull traversal.
Definition Node:293
Callback * getEventCallback()
Get event node callback, called during event traversal.
Definition Node:252
Visitor for type safe operations on osg::Nodes.
Definition NodeVisitor:82
@ TRAVERSE_ALL_CHILDREN
Definition NodeVisitor:89
void traverse(Node &node)
Method for handling traversal of a nodes.
Definition NodeVisitor:274
NodeVisitor(TraversalMode tm=TRAVERSE_NONE)
void setNodeMaskOverride(Node::NodeMask mask)
Set the NodeMaskOverride mask.
Definition NodeVisitor:210
Base class/standard interface for objects which require IO support, cloning and reference counting.
Definition Object:61
DataVariance
Definition Object:217
@ DYNAMIC
Definition Object:218
@ STATIC
Definition Object:219
@ UNSPECIFIED
Definition Object:220
virtual Referenced * getUserData()
Get user data.
PagedLOD.
Definition PagedLOD:24
Definition PrimitiveSet:222
Definition PrimitiveSet:278
Definition PrimitiveSet:372
Definition PrimitiveSet:435
Definition PrimitiveSet:502
ProxyNode.
Definition ProxyNode:24
Smart pointer for handling referenced counted objects.
Definition ref_ptr:32
T * get() const
Definition ref_ptr:117
Base class for providing reference counted objects.
Definition Referenced:44
Base class for state attributes.
Definition StateAttribute:77
Stores a set of modes and attributes which represent a set of OpenGL state.
Definition StateSet:46
Texture pure virtual base class that encapsulates OpenGL texture functionality common to the various ...
Definition Texture:422
Encapsulates OpenGL 2D texture functionality.
Definition Texture2D:25
Image * getImage()
Gets the texture image.
Definition Texture2D:58
A Transform is a group node for which all children are transformed by a 4x4 matrix.
Definition Transform:75
bool isOperationPermissibleForObject(const osg::StateSet *object) const
Definition Optimizer:863
BaseOptimizerVisitor(Optimizer *optimizer, unsigned int operation)
Definition Optimizer:37
Optimizer * _optimizer
Definition Optimizer:52
unsigned int _operationType
Definition Optimizer:53
Traverses scene graph to improve efficiency.
Definition Optimizer:61
bool isOperationPermissibleForObject(const osg::Node *object, unsigned int option) const
Definition Optimizer:208
bool isOperationPermissibleForObject(const osg::StateSet *object, unsigned int option) const
Definition Optimizer:184
const IsOperationPermissibleForObjectCallback * getIsOperationPermissibleForObjectCallback() const
Get the callback for customizing what operations are permitted on objects in the scene graph.
Definition Optimizer:168
void setIsOperationPermissibleForObjectCallback(IsOperationPermissibleForObjectCallback *callback)
Set the callback for customizing what operations are permitted on objects in the scene graph.
Definition Optimizer:162
virtual ~Optimizer()
Definition Optimizer:66
virtual void optimize(osg::Node *node, unsigned int options)
Traverse the node and its subgraph with a series of optimization visitors, specified by the Optimizat...
void optimize(osg::Node *node)
Traverse the node and its subgraph with a series of optimization visitors, specified by the Optimizat...
std::map< const osg::Object *, unsigned int > PermissibleOptimizationsMap
Definition Optimizer:259
bool isOperationPermissibleForObjectImplementation(const osg::Node *node, unsigned int option) const
Definition Optimizer:238
Optimizer()
Definition Optimizer:65
osg::ref_ptr< IsOperationPermissibleForObjectCallback > _isOperationPermissibleForObjectCallback
Definition Optimizer:257
IsOperationPermissibleForObjectCallback * getIsOperationPermissibleForObjectCallback()
Get the callback for customizing what operations are permitted on objects in the scene graph.
Definition Optimizer:165
unsigned int getPermissibleOptimizationsForObject(const osg::Object *object) const
Definition Optimizer:176
bool isOperationPermissibleForObjectImplementation(const osg::StateAttribute *attribute, unsigned int option) const
Definition Optimizer:221
void optimize(const osg::ref_ptr< T > &node, unsigned int options)
Definition Optimizer:133
OptimizationOptions
Definition Optimizer:69
@ VERTEX_POSTTRANSFORM
Definition Optimizer:89
@ INDEX_MESH
Definition Optimizer:88
@ MAKE_FAST_GEOMETRY
Definition Optimizer:77
@ STATIC_OBJECT_DETECTION
Definition Optimizer:86
@ TESSELLATE_GEOMETRY
Definition Optimizer:81
@ FLATTEN_STATIC_TRANSFORMS
Definition Optimizer:70
@ MERGE_GEODES
Definition Optimizer:83
@ FLATTEN_STATIC_TRANSFORMS_DUPLICATING_SHARED_SUBGRAPHS
Definition Optimizer:87
@ CHECK_GEOMETRY
Definition Optimizer:76
@ TEXTURE_ATLAS_BUILDER
Definition Optimizer:85
@ BUFFER_OBJECT_SETTINGS
Definition Optimizer:91
@ ALL_OPTIMIZATIONS
Definition Optimizer:102
@ DEFAULT_OPTIMIZATIONS
Definition Optimizer:92
@ MERGE_GEOMETRY
Definition Optimizer:75
@ OPTIMIZE_TEXTURE_SETTINGS
Definition Optimizer:82
@ VERTEX_PRETRANSFORM
Definition Optimizer:90
@ TRISTRIP_GEOMETRY
Definition Optimizer:80
@ REMOVE_REDUNDANT_NODES
Definition Optimizer:71
@ SPATIALIZE_GROUPS
Definition Optimizer:78
@ COPY_SHARED_NODES
Definition Optimizer:79
@ REMOVE_LOADED_PROXY_NODES
Definition Optimizer:72
@ COMBINE_ADJACENT_LODS
Definition Optimizer:73
@ FLATTEN_BILLBOARDS
Definition Optimizer:84
@ SHARE_DUPLICATE_STATE
Definition Optimizer:74
void reset()
Reset internal data to initial state - the getPermissibleOptionsMap is cleared.
void optimize(const osg::ref_ptr< T > &node)
Definition Optimizer:127
bool isOperationPermissibleForObject(const osg::StateAttribute *object, unsigned int option) const
Definition Optimizer:192
bool isOperationPermissibleForObjectImplementation(const osg::Drawable *drawable, unsigned int option) const
Definition Optimizer:226
bool isOperationPermissibleForObjectImplementation(const osg::StateSet *stateset, unsigned int option) const
Definition Optimizer:216
void setPermissibleOptimizationsForObject(const osg::Object *object, unsigned int options)
Definition Optimizer:171
bool isOperationPermissibleForObject(const osg::Drawable *object, unsigned int option) const
Definition Optimizer:200
PermissibleOptimizationsMap _permissibleOptimizationsMap
Definition Optimizer:260
Callback for customizing what operations are permitted on objects in the scene graph.
Definition Optimizer:138
virtual bool isOperationPermissibleForObjectImplementation(const Optimizer *optimizer, const osg::StateSet *stateset, unsigned int option) const
Definition Optimizer:139
virtual bool isOperationPermissibleForObjectImplementation(const Optimizer *optimizer, const osg::Drawable *drawable, unsigned int option) const
Definition Optimizer:149
virtual bool isOperationPermissibleForObjectImplementation(const Optimizer *optimizer, const osg::Node *node, unsigned int option) const
Definition Optimizer:154
virtual bool isOperationPermissibleForObjectImplementation(const Optimizer *optimizer, const osg::StateAttribute *attribute, unsigned int option) const
Definition Optimizer:144
bool removeTransforms(osg::Node *nodeWeCannotRemove)
FlattenStaticTransformsVisitor(Optimizer *optimizer=0)
Definition Optimizer:274
virtual void apply(osg::Transform &transform)
BillboardSet _billboardSet
Definition Optimizer:297
virtual void apply(osg::Drawable &drawable)
virtual void apply(osg::ProxyNode &node)
std::vector< osg::Transform * > TransformStack
Definition Optimizer:288
TransformSet _transformSet
Definition Optimizer:298
DrawableSet _drawableSet
Definition Optimizer:296
virtual void apply(osg::PagedLOD &node)
NodeSet _excludedNodeSet
Definition Optimizer:295
TransformStack _transformStack
Definition Optimizer:294
std::set< osg::Node * > NodeSet
Definition Optimizer:291
virtual void apply(osg::Billboard &geode)
std::set< osg::Transform * > TransformSet
Definition Optimizer:292
std::set< osg::Billboard * > BillboardSet
Definition Optimizer:290
virtual void apply(osg::Node &geode)
std::set< osg::Drawable * > DrawableSet
Definition Optimizer:289
FlattenStaticTransformsDuplicatingSharedSubgraphsVisitor(Optimizer *optimizer=0)
Definition Optimizer:312
virtual void apply(osg::Geode &geode)
std::vector< osg::Matrix > _matrixStack
Definition Optimizer:329
virtual void reset()
Method to call to reset visitor.
virtual void apply(osg::Group &group)
virtual void apply(osg::Transform &transform)
virtual void apply(osg::Billboard &billboard)
void transformBillboard(osg::Billboard &billboard)
void transformDrawable(osg::Drawable &drawable)
void transformGeode(osg::Geode &geode)
virtual void apply(osg::LOD &lod)
std::set< osg::MatrixTransform * > TransformSet
Definition Optimizer:347
bool removeTransforms(osg::Node *nodeWeCannotRemove)
TransformSet _transformSet
Definition Optimizer:348
virtual void apply(osg::MatrixTransform &transform)
CombineStaticTransformsVisitor(Optimizer *optimizer=0)
Definition Optimizer:338
RemoveEmptyNodesVisitor(Optimizer *optimizer=0)
Definition Optimizer:360
virtual void apply(osg::Group &group)
NodeList _redundantNodeList
Definition Optimizer:358
std::set< osg::Node * > NodeList
Definition Optimizer:357
std::set< osg::Node * > NodeList
Definition Optimizer:374
void removeRedundantNodes()
virtual void apply(osg::Transform &transform)
virtual void apply(osg::Group &group)
NodeList _redundantNodeList
Definition Optimizer:375
RemoveRedundantNodesVisitor(Optimizer *optimizer=0)
Definition Optimizer:377
bool isOperationPermissible(osg::Node &node)
RemoveLoadedProxyNodesVisitor(Optimizer *optimizer=0)
Definition Optimizer:397
virtual void apply(osg::ProxyNode &group)
std::set< osg::Node * > NodeList
Definition Optimizer:394
void removeRedundantNodes()
NodeList _redundantNodeList
Definition Optimizer:395
TessellateVisitor(Optimizer *optimizer=0)
Definition Optimizer:414
GroupList _groupList
Definition Optimizer:412
virtual void apply(osg::Geometry &geom)
std::set< osg::Group * > GroupList
Definition Optimizer:411
std::set< osg::Group * > GroupList
Definition Optimizer:427
CombineLODsVisitor(Optimizer *optimizer=0)
Definition Optimizer:430
virtual void apply(osg::LOD &lod)
GroupList _groupList
Definition Optimizer:428
std::map< osg::StateSet *, NodeSet > StateSetMap
Definition Optimizer:475
bool optimize(osg::Object::DataVariance variance)
Definition Optimizer:469
void addStateSet(osg::StateSet *stateset, osg::Node *node)
bool _optimize[3]
Definition Optimizer:478
StateVisitor(bool combineDynamicState, bool combineStaticState, bool combineUnspecifiedState, Optimizer *optimizer=0)
default to traversing all children.
Definition Optimizer:447
std::set< osg::Node * > NodeSet
Definition Optimizer:474
StateSetMap _statesets
Definition Optimizer:480
virtual void apply(osg::Node &node)
virtual void reset()
empty visitor, make it ready for next traversal.
MergeGeodesVisitor(Optimizer *optimizer=0)
default to traversing all children.
Definition Optimizer:491
bool mergeGeode(osg::Geode &lhs, osg::Geode &rhs)
bool mergeGeodes(osg::Group &group)
virtual void apply(osg::Group &group)
virtual void apply(osg::Geometry &geom)
MakeFastGeometryVisitor(Optimizer *optimizer=0)
default to traversing all children.
Definition Optimizer:509
void setTargetMaximumNumberOfVertices(unsigned int num)
Definition Optimizer:525
unsigned int _targetMaximumNumberOfVertices
Definition Optimizer:552
static bool geometryContainsSharedArrays(osg::Geometry &geom)
MergeGeometryVisitor(Optimizer *optimizer=0)
default to traversing all children.
Definition Optimizer:521
static bool mergePrimitive(osg::DrawElementsUByte &lhs, osg::DrawElementsUByte &rhs)
static bool mergeGeometry(osg::Geometry &lhs, osg::Geometry &rhs)
unsigned int getTargetMaximumNumberOfVertices() const
Definition Optimizer:530
static bool mergePrimitive(osg::DrawArrays &lhs, osg::DrawArrays &rhs)
virtual void apply(osg::Billboard &)
Definition Optimizer:536
static bool mergePrimitive(osg::DrawElementsUInt &lhs, osg::DrawElementsUInt &rhs)
bool mergeGroup(osg::Group &group)
virtual void apply(osg::Group &group)
Definition Optimizer:535
static bool mergePrimitive(osg::DrawElementsUShort &lhs, osg::DrawElementsUShort &rhs)
static bool mergePrimitive(osg::DrawArrayLengths &lhs, osg::DrawArrayLengths &rhs)
bool divide(osg::Group *group, unsigned int maxNumTreesPerCell)
virtual void apply(osg::Geode &geode)
std::set< osg::Geode * > GeodesToDivideList
Definition Optimizer:575
GeodesToDivideList _geodesToDivideList
Definition Optimizer:576
virtual void apply(osg::Group &group)
std::set< osg::Group * > GroupsToDivideList
Definition Optimizer:572
SpatializeGroupsVisitor(Optimizer *optimizer=0)
Definition Optimizer:561
GroupsToDivideList _groupsToDivideList
Definition Optimizer:573
bool divide(osg::Geode *geode, unsigned int maxNumTreesPerCell)
bool divide(unsigned int maxNumTreesPerCell=8)
std::set< osg::Node * > SharedNodeList
Definition Optimizer:591
SharedNodeList _sharedNodeList
Definition Optimizer:592
CopySharedSubgraphsVisitor(Optimizer *optimizer=0)
Definition Optimizer:584
virtual void apply(osg::Node &node)
bool _valueClientImageStorage
Definition Optimizer:617
float _valueAnisotropy
Definition Optimizer:619
virtual void apply(osg::Node &node)
void apply(osg::StateSet &stateset)
bool _changeAnisotropy
Definition Optimizer:618
bool _changeClientImageStorage
Definition Optimizer:617
bool _valueAutoUnRef
Definition Optimizer:616
bool _changeAutoUnRef
Definition Optimizer:616
void apply(osg::Texture &texture)
TextureVisitor(bool changeAutoUnRef, bool valueAutoUnRef, bool changeClientImageStorage, bool valueClientImageStorage, bool changeAnisotropy, float valueAnisotropy, Optimizer *optimizer=0)
Definition Optimizer:602
std::vector< osg::NodePath > NodePathList
Definition Optimizer:630
std::map< osg::Billboard *, NodePathList > BillboardNodePathMap
Definition Optimizer:631
virtual void reset()
Method to call to reset visitor.
virtual void apply(osg::Billboard &billboard)
BillboardNodePathMap _billboards
Definition Optimizer:639
FlattenBillboardVisitor(Optimizer *optimizer=0)
Definition Optimizer:627
Texture Atlas Builder creates a set of textures/images which each contain multiple images.
Definition Optimizer:646
void addSource(const osg::Texture2D *texture)
void addSource(const osg::Image *image)
osg::Matrix getTextureMatrix(const osg::Texture2D *texture)
int getMargin() const
Definition Optimizer:658
int getMaximumAtlasWidth() const
Definition Optimizer:654
int _margin
Definition Optimizer:684
osg::Texture2D * getTextureAtlas(const osg::Image *image)
osg::Image * getImageAtlas(const osg::Image *image)
const osg::Texture2D * getSourceTexture(unsigned int i)
Definition Optimizer:665
int _maximumAtlasHeight
Definition Optimizer:683
void setMaximumAtlasSize(int width, int height)
std::vector< osg::ref_ptr< Atlas > > AtlasList
Definition Optimizer:762
AtlasList _atlasList
Definition Optimizer:768
osg::Matrix getTextureMatrix(unsigned int i)
const osg::Image * getSourceImage(unsigned int i)
Definition Optimizer:664
int getMaximumAtlasHeight() const
Definition Optimizer:655
std::vector< osg::ref_ptr< Source > > SourceList
Definition Optimizer:718
int _maximumAtlasWidth
Definition Optimizer:682
osg::Image * getImageAtlas(unsigned int i)
unsigned int getNumSources() const
Definition Optimizer:663
Source * getSource(const osg::Image *image)
Source * getSource(const osg::Texture2D *texture)
osg::Matrix getTextureMatrix(const osg::Image *image)
osg::Texture2D * getTextureAtlas(const osg::Texture2D *texture)
osg::Image * getImageAtlas(const osg::Texture2D *textue)
SourceList _sourceList
Definition Optimizer:767
void setMargin(int margin)
osg::Texture2D * getTextureAtlas(unsigned int i)
osg::Matrix computeTextureMatrix() const
Source(const osg::Texture2D *texture)
Definition Optimizer:699
Atlas * _atlas
Definition Optimizer:704
osg::ref_ptr< const osg::Image > _image
Definition Optimizer:706
int _y
Definition Optimizer:703
Source()
Definition Optimizer:693
bool suitableForAtlas(int maximumAtlasWidth, int maximumAtlasHeight, int margin)
int _x
Definition Optimizer:702
osg::ref_ptr< const osg::Texture2D > _texture
Definition Optimizer:707
Source(const osg::Image *image)
Definition Optimizer:696
virtual ~Source()
Definition Optimizer:715
bool addSource(Source *source)
int _height
Definition Optimizer:745
int _maximumAtlasHeight
Definition Optimizer:734
void clampToNearestPowerOfTwoSize()
int _width
Definition Optimizer:744
int _margin
Definition Optimizer:735
Atlas(int width, int height, int margin)
Definition Optimizer:723
unsigned int _indexFirstOfRow
Contain the index of the first element of the last row.
Definition Optimizer:746
int _y
Definition Optimizer:743
osg::ref_ptr< osg::Texture2D > _texture
Definition Optimizer:737
virtual ~Atlas()
Definition Optimizer:759
int _maximumAtlasWidth
Definition Optimizer:733
FitsIn doesSourceFit(Source *source)
SourceList _sourceList
Definition Optimizer:740
osg::ref_ptr< osg::Image > _image
Definition Optimizer:738
FitsIn
Definition Optimizer:748
@ DOES_NOT_FIT_IN_ANY_ROW
Definition Optimizer:749
@ IN_NEXT_ROW
Definition Optimizer:751
@ FITS_IN_CURRENT_ROW
Definition Optimizer:750
int _x
Definition Optimizer:742
virtual void apply(osg::Node &node)
std::map< osg::StateSet *, Drawables > StateSetMap
Definition Optimizer:809
TextureAtlasBuilder _builder
Definition Optimizer:813
std::set< osg::Drawable * > Drawables
Definition Optimizer:808
StateSetMap _statesetMap
Definition Optimizer:815
TextureAtlasBuilder & getTextureAtlasBuilder()
Definition Optimizer:793
virtual void reset()
empty visitor, make it ready for next traversal.
Textures _textures
Definition Optimizer:817
std::vector< osg::StateSet * > StateSetStack
Definition Optimizer:811
StateSetStack _statesetStack
Definition Optimizer:816
std::set< osg::Texture2D * > Textures
Definition Optimizer:810
bool pushStateSet(osg::StateSet *stateset)
TextureAtlasVisitor(Optimizer *optimizer=0)
default to traversing all children.
Definition Optimizer:789
virtual void apply(osg::Drawable &node)
void applyStateSet(osg::StateSet &stateset)
virtual void apply(osg::Drawable &drawable)
virtual void apply(osg::Node &node)
StaticObjectDetectionVisitor(Optimizer *optimizer=0)
default to traversing all children.
Definition Optimizer:828
bool _valueVertexBufferObject
Definition Optimizer:856
BufferObjectVisitor(bool changeVBO, bool valueVBO, bool changeVertexArrayObject, bool valueVertexArrayObject, bool changeDisplayList, bool valueDisplayList, Optimizer *optimizer=0)
Definition Optimizer:845
bool _changeVertexArrayObject
Definition Optimizer:857
bool _changeVertexBufferObject
Definition Optimizer:856
bool _valueVertexArrayObject
Definition Optimizer:857
virtual void apply(osg::Geometry &geometry)
bool _changeDisplayList
Definition Optimizer:858
bool _valueDisplayList
Definition Optimizer:858
#define OSGUTIL_EXPORT
Definition Export:40