From 0d9887462a4d97fdf0eeddc7123d62e3e975234b Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Sat, 23 Apr 2005 16:09:20 +0000 Subject: [PATCH] Added MergeGeometryVisitor::setTargetMaximumNumberOfVertices(uint); --- include/osgUtil/Optimizer | 17 ++++++++++++++++- src/osgUtil/Optimizer.cpp | 8 +++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/include/osgUtil/Optimizer b/include/osgUtil/Optimizer index f57894157..a263aa015 100644 --- a/include/osgUtil/Optimizer +++ b/include/osgUtil/Optimizer @@ -417,7 +417,18 @@ class OSGUTIL_EXPORT Optimizer /// default to traversing all children. MergeGeometryVisitor(Optimizer* optimizer=0) : - BaseOptimizerVisitor(optimizer, MERGE_GEOMETRY) {} + BaseOptimizerVisitor(optimizer, MERGE_GEOMETRY), + _targetMaximumNumberOfVertices(10000) {} + + void setTargetMaximumNumberOfVertices(unsigned int num) + { + _targetMaximumNumberOfVertices = num; + } + + unsigned int getTargetMaximumNumberOfVertices() const + { + return _targetMaximumNumberOfVertices; + } virtual void apply(osg::Geode& geode) { mergeGeode(geode); } virtual void apply(osg::Billboard&) { /* don't do anything*/ } @@ -434,6 +445,10 @@ class OSGUTIL_EXPORT Optimizer static bool mergePrimitive(osg::DrawElementsUShort& lhs,osg::DrawElementsUShort& rhs); static bool mergePrimitive(osg::DrawElementsUInt& lhs,osg::DrawElementsUInt& rhs); + protected: + + unsigned int _targetMaximumNumberOfVertices; + }; /** Spatialize scene into a balanced quad/oct tree.*/ diff --git a/src/osgUtil/Optimizer.cpp b/src/osgUtil/Optimizer.cpp index aaaa71700..2b82db886 100644 --- a/src/osgUtil/Optimizer.cpp +++ b/src/osgUtil/Optimizer.cpp @@ -1493,8 +1493,6 @@ bool Optimizer::MergeGeometryVisitor::mergeGeode(osg::Geode& geode) // don't merge geometry if its above a maximum number of vertices. - unsigned int _maximumNumber = 10000; - for(GeometryDuplicateMap::iterator itr=geometryDuplicateMap.begin(); itr!=geometryDuplicateMap.end(); ++itr) @@ -1510,19 +1508,19 @@ bool Optimizer::MergeGeometryVisitor::mergeGeode(osg::Geode& geode) osg::Geometry* rhs = *dupItr; - if (lhs->getVertexArray() && lhs->getVertexArray()->getNumElements()>=_maximumNumber) + if (lhs->getVertexArray() && lhs->getVertexArray()->getNumElements()>=_targetMaximumNumberOfVertices) { lhs = rhs; continue; } - if (rhs->getVertexArray() && rhs->getVertexArray()->getNumElements()>=_maximumNumber) + if (rhs->getVertexArray() && rhs->getVertexArray()->getNumElements()>=_targetMaximumNumberOfVertices) { continue; } if (lhs->getVertexArray() && rhs->getVertexArray() && - (lhs->getVertexArray()->getNumElements()+rhs->getVertexArray()->getNumElements())>=_maximumNumber) + (lhs->getVertexArray()->getNumElements()+rhs->getVertexArray()->getNumElements())>=_targetMaximumNumberOfVertices) { continue; }