]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scenery/SceneryPager.cxx
Allow using the system version of flite and the HTS engine
[flightgear.git] / src / Scenery / SceneryPager.cxx
index 183511361991777dffc86d1f63a1f7194cb184b3..892b7bc1aceb0289410dc314ce054e214d06629c 100644 (file)
@@ -20,8 +20,6 @@
 #  include <config.h>
 #endif
 
-#include <simgear/scene/model/SGPagedLOD.hxx>
-#include <simgear/math/SGMath.hxx>
 #include "SceneryPager.hxx"
 #include <algorithm>
 #include <functional>
@@ -44,25 +42,10 @@ 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
-                                   )
+void SceneryPager::clearRequests()
 {
-    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);
+    _pagerRequests.clear();
+    _deleteRequests.clear();
 }
 
 void SceneryPager::queueRequest(const std::string& fileName, Group* group,
@@ -81,6 +64,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;