void TileGroup::traverse(osg::NodeVisitor& nv) { if ( nv.getTraversalMode() == nv.TRAVERSE_ACTIVE_CHILDREN ) { float range = 0.0f; if ( nv.getVisitorType() == nv.CULL_VISITOR ) { range = nv.getDistanceFromEyePoint( getBound().center(), true ); } // if all four subtiles have reported that they are upsampling, // don't use any of them. if ( _traverseSubtiles && _numSubtilesUpsampling == 4 ) { _traverseSubtiles = false; } // if we are out of subtile range, or we're in range but the subtiles are // not all loaded yet, or we are skipping subtiles, draw the current tile. if ( range > _subtileRange || _numSubtilesLoaded < 4 || !_traverseSubtiles ) { _tilenode->accept( nv ); } // if we're in range, traverse the subtiles. if ( _traverseSubtiles && range <= _subtileRange ) { for( unsigned q=0; q<4; ++q ) { getChild(1+q)->accept( nv ); } // update the TileNode so it knows what frame we're in. if ( nv.getFrameStamp() ) { _tilenode->setLastTraversalFrame( nv.getFrameStamp()->getFrameNumber() ); } } } else { osg::Group::traverse( nv ); } }