Added MergeGeometryVisitor::setTargetMaximumNumberOfVertices(uint);
This commit is contained in:
@@ -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.*/
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user