From 2d9e469afa694c8276bef9fd9c7891320b98d635 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 27 May 2010 18:46:58 +0000 Subject: [PATCH] Refactored the expiry and PagedLOD counting so that it's now done in single CountPagedLODsVisitor::removeExpiredChildrenAndCountPagedLODs method --- src/osgDB/DatabasePager.cpp | 41 +++++++++++++------------------------ 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/src/osgDB/DatabasePager.cpp b/src/osgDB/DatabasePager.cpp index b09bad10e..d7fc4909c 100644 --- a/src/osgDB/DatabasePager.cpp +++ b/src/osgDB/DatabasePager.cpp @@ -1573,6 +1573,17 @@ public: traverse(plod); } + bool removeExpiredChildrenAndCountPagedLODs(osg::PagedLOD* plod, double expiryTime, int expiryFrame, osg::NodeList& removedChildren) + { + size_t sizeBefore = removedChildren.size(); + plod->removeExpiredChildren(expiryTime, expiryFrame, removedChildren); + for(size_t i = sizeBefore; iaccept(*this); + } + return sizeBefore!=removedChildren.size(); + } + typedef std::set PagedLODset; PagedLODset _pagedLODs; @@ -1680,6 +1691,7 @@ void DatabasePager::removeExpiredSubgraphs(const osg::FrameStamp& frameStamp) osg::NodeList childrenRemoved; + childrenRemoved.reserve(numToPrune); double expiryTime = frameStamp.getReferenceTime() - 0.1; int expiryFrame = frameStamp.getFrameNumber() - 1; @@ -1693,20 +1705,7 @@ void DatabasePager::removeExpiredSubgraphs(const osg::FrameStamp& frameStamp) osg::ref_ptr plod = itr->lock(); if (plod.valid() && countPagedLODsVisitor._pagedLODs.count(plod.get())==0) { - osg::NodeList localChildrenRemoved; - plod->removeExpiredChildren(expiryTime, expiryFrame, localChildrenRemoved); - if (!localChildrenRemoved.empty()) - { - - for(osg::NodeList::iterator critr = localChildrenRemoved.begin(); - critr!=localChildrenRemoved.end(); - ++critr) - { - (*critr)->accept(countPagedLODsVisitor); - } - - std::copy(localChildrenRemoved.begin(),localChildrenRemoved.end(),std::back_inserter(childrenRemoved)); - } + countPagedLODsVisitor.removeExpiredChildrenAndCountPagedLODs(plod.get(), expiryTime, expiryFrame, childrenRemoved); // advance the iterator to the next element ++itr; @@ -1725,19 +1724,7 @@ void DatabasePager::removeExpiredSubgraphs(const osg::FrameStamp& frameStamp) osg::ref_ptr plod = itr->lock(); if (plod.valid() && countPagedLODsVisitor._pagedLODs.count(plod.get())==0) { - osg::NodeList localChildrenRemoved; - plod->removeExpiredChildren(expiryTime, expiryFrame, localChildrenRemoved); - if (!localChildrenRemoved.empty()) - { - for(osg::NodeList::iterator critr = localChildrenRemoved.begin(); - critr!=localChildrenRemoved.end(); - ++critr) - { - (*critr)->accept(countPagedLODsVisitor); - } - - std::copy(localChildrenRemoved.begin(),localChildrenRemoved.end(),std::back_inserter(childrenRemoved)); - } + countPagedLODsVisitor.removeExpiredChildrenAndCountPagedLODs(plod.get(), expiryTime, expiryFrame, childrenRemoved); // advance the iterator to the next element ++itr;