]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scenery/SceneryPager.cxx
Improve timing statistics
[flightgear.git] / src / Scenery / SceneryPager.cxx
index 6f79a56eec8e5685f6cb3e9f9ce550d37d1dd816..9328973ef4c6162deb3c5e1ca60d690a41269106 100644 (file)
@@ -1,4 +1,4 @@
-// SceneryPager.hxx -- Interface to OSG database pager
+// SceneryPager.cxx -- Interface to OSG database pager
 //
 // Copyright (C) 2007 Tim Moore timoore@redhat.com
 //
@@ -33,7 +33,6 @@ SceneryPager::SceneryPager()
 {
     _pagerRequests.reserve(48);
     _deleteRequests.reserve(16);
-    setExpiryDelay(120.0);
 }
 
 SceneryPager::SceneryPager(const SceneryPager& rhs) :
@@ -45,15 +44,12 @@ SceneryPager::~SceneryPager()
 {
 }
 
+#if SG_PAGEDLOD_HAS_OPTIONS
+#else
 void SceneryPager::requestNodeFile(const std::string& fileName, Group* group,
                                    float priority, const FrameStamp* framestamp,
                                    ref_ptr<Referenced>& databaseRequest,
-#if SG_OSG_MIN_VERSION_REQUIRED(2,9,5)
-                                   const osg::Referenced* options
-#else
-                                   osgDB::ReaderWriter::Options* options
-#endif
-                                   )
+                                   osgDB::ReaderWriter::Options* options)
 {
     simgear::SGPagedLOD *sgplod = dynamic_cast<simgear::SGPagedLOD*>(group);
     if(sgplod)
@@ -65,6 +61,7 @@ void SceneryPager::requestNodeFile(const std::string& fileName, Group* group,
                                        databaseRequest,
                                        options);
 }
+#endif
 
 void SceneryPager::queueRequest(const std::string& fileName, Group* group,
                                 float priority, FrameStamp* frameStamp,
@@ -82,6 +79,35 @@ void SceneryPager::queueDeleteRequest(osg::ref_ptr<osg::Object>& objptr)
     _deleteRequests.push_back(objptr);
     objptr = 0;
 }
+
+// Work around interface change in
+// osgDB::DatabasePager::requestNodeFile
+namespace
+{
+struct NodePathProxy
+{
+    NodePathProxy(NodePath& nodePath)
+        : _nodePath(nodePath)
+    {
+    }
+    operator Group* () { return static_cast<Group*>(_nodePath.back()); }
+    operator NodePath& () { return _nodePath; }
+    NodePath& _nodePath;
+};
+}
+
+void SceneryPager::PagerRequest::doRequest(SceneryPager* pager)
+{
+    if (_group->getNumChildren() == 0) {
+        NodePath path;
+        path.push_back(_group.get());
+        pager->requestNodeFile(_fileName, NodePathProxy(path), _priority,
+                               _frameStamp.get(),
+                               *_databaseRequest,
+                               _options.get());
+    }
+}
+
 void SceneryPager::signalEndFrame()
 {
     using namespace std;