From 8f2497e21d4b4139818c4dc963b9a96375ad57f2 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 1 Oct 2010 15:37:35 +0000 Subject: [PATCH] From Wojciech Lewandowski,"These are our changes to DatabasePager. To check if parent PLOD is registered, I resurrected PagedLODList::containsPagedLOD() method. This method was available some time ago, but got removed and was not currently present in trunk. To add this method I had to also modify the DatabasePager header. " --- include/osgDB/DatabasePager | 1 + src/osgDB/DatabasePager.cpp | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/osgDB/DatabasePager b/include/osgDB/DatabasePager index 8b0405480..6f87c3c3c 100644 --- a/include/osgDB/DatabasePager +++ b/include/osgDB/DatabasePager @@ -355,6 +355,7 @@ class OSGDB_EXPORT DatabasePager : public osg::NodeVisitor::DatabaseRequestHandl virtual void removeExpiredChildren(int& numberChildrenToRemove, double expiryTime, int expiryFrame, osg::NodeList& childrenRemoved) = 0; virtual void removeNodes(osg::NodeList& nodesToRemove) = 0; virtual void insertPagedLOD(const osg::observer_ptr& plod) = 0; + virtual bool containsPagedLOD(const osg::observer_ptr& plod) const = 0; }; protected: diff --git a/src/osgDB/DatabasePager.cpp b/src/osgDB/DatabasePager.cpp index 794e2a3c9..af70e1712 100644 --- a/src/osgDB/DatabasePager.cpp +++ b/src/osgDB/DatabasePager.cpp @@ -294,6 +294,11 @@ public: _pagedLODs.insert(plod); } + virtual bool containsPagedLOD(const osg::observer_ptr& plod) const + { + return (_pagedLODs.count(plod)!=0); + } + }; @@ -1809,7 +1814,17 @@ void DatabasePager::addLoadedDataToSceneGraph(const osg::FrameStamp &frameStamp) group->addChild(databaseRequest->_loadedModel.get()); - registerPagedLODs(databaseRequest->_loadedModel.get(), frameStamp.getFrameNumber()); + // Check if parent plod was already registered if not start visitor from parent + if( plod && + !_activePagedLODList->containsPagedLOD( plod ) && + !_inactivePagedLODList->containsPagedLOD( plod ) ) + { + registerPagedLODs(plod, frameNumber); + } + else + { + registerPagedLODs(databaseRequest->_loadedModel.get(), frameNumber); + } // OSG_NOTICE<<"merged subgraph"<_fileName<<" after "<_numOfRequests<<" requests and time="<<(timeStamp-databaseRequest->_timestampFirstRequest)*1000.0<