void GeometryModifier::apply( osg::Geode& geode ) { // merge drawables if possible for best results if (getDrawableMerge()) { osgUtil::Optimizer::MergeGeometryVisitor mgv; mgv.setTargetMaximumNumberOfVertices(1000000); mgv.mergeGeode(geode); } for(unsigned int i=0;i<geode.getNumDrawables();++i) { _drawableCount++; osg::ref_ptr< osg::Geometry > geometry = geode.getDrawable(i)->asGeometry(); if( geometry.valid() ) { _geometryCount++; if( geometry->containsSharedArrays() ) osg::notify( osg::DEBUG_INFO ) << "Warning! Geometry contains shared arrays" << std::endl; // Get statistics before incStatistics( geometry.get(), _preVertices, _preIndices, _preTriangles ); osg::ref_ptr< osg::Geometry > newGeom = (*_geomOp)( *geometry ); geode.replaceDrawable( geometry.get(), newGeom.get() ); // Get statistics after incStatistics( newGeom.get(), _postVertices, _postIndices, _postTriangles ); } } }