]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scenery/SceneryPager.cxx
Expose a radio function (receiveBeacon) to the Nasal subsystem
[flightgear.git] / src / Scenery / SceneryPager.cxx
index e23a71d2612a4cfde678f5c5348089270decb35f..7d76ba727c36d63d6461c9dbe36cb54456d09deb 100644 (file)
@@ -20,7 +20,6 @@
 #  include <config.h>
 #endif
 
-#include <simgear/scene/model/SGPagedLOD.hxx>
 #include <simgear/math/SGMath.hxx>
 #include "SceneryPager.hxx"
 #include <algorithm>
@@ -33,7 +32,6 @@ SceneryPager::SceneryPager()
 {
     _pagerRequests.reserve(48);
     _deleteRequests.reserve(16);
-    setExpiryDelay(120.0);
 }
 
 SceneryPager::SceneryPager(const SceneryPager& rhs) :
@@ -45,27 +43,6 @@ SceneryPager::~SceneryPager()
 {
 }
 
-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
-                                   )
-{
-    simgear::SGPagedLOD *sgplod = dynamic_cast<simgear::SGPagedLOD*>(group);
-    if(sgplod)
-        DatabasePager::requestNodeFile(fileName, group, priority, framestamp,
-                                       databaseRequest,
-                                       sgplod->getReaderWriterOptions());
-    else
-        DatabasePager::requestNodeFile(fileName, group, priority, framestamp,
-                                       databaseRequest,
-                                       options);
-}
-
 void SceneryPager::queueRequest(const std::string& fileName, Group* group,
                                 float priority, FrameStamp* frameStamp,
                                 ref_ptr<Referenced>& databaseRequest,
@@ -82,6 +59,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;