]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scenery/SceneryPager.hxx
Synchronized with JSBSim/CVS
[flightgear.git] / src / Scenery / SceneryPager.hxx
index 283c9db95bf6beec18d7af975b7c95ad4bcd260e..d8f519a1bc3960255701c0ea058240060efddcb7 100644 (file)
@@ -19,6 +19,7 @@
 // $Id$
 
 #ifndef FLIGHTGEAR_SCENERYPAGERHXX
+#define FLIGHTGEAR_SCENERYPAGERHXX 1
 #include <string>
 #include <vector>
 
@@ -26,6 +27,8 @@
 #include <osg/Group>
 #include <osgDB/DatabasePager>
 
+#include <simgear/structure/OSGVersion.hxx>
+
 namespace flightgear
 {
 class SceneryPager : public osgDB::DatabasePager
@@ -33,13 +36,12 @@ class SceneryPager : public osgDB::DatabasePager
 public:
     SceneryPager();
     SceneryPager(const SceneryPager& rhs);
-
-    // reimplement to add readerWriterOptions from SGPagedLOD
-    virtual void requestNodeFile(const std::string& fileName,osg::Group* group,
-                                 float priority, const osg::FrameStamp* framestamp);
-
+    // Unhide DatabasePager::requestNodeFile
+    using osgDB::DatabasePager::requestNodeFile;
     void queueRequest(const std::string& fileName, osg::Group* node,
-                      float priority, osg::FrameStamp* frameStamp);
+                      float priority, osg::FrameStamp* frameStamp,
+                      osg::ref_ptr<osg::Referenced>& databaseRequest,
+                      osgDB::ReaderWriter::Options* options);
     // This is passed a ref_ptr so that it can "take ownership" of the
     // node to delete and decrement its refcount while holding the
     // lock on the delete list.
@@ -49,24 +51,28 @@ protected:
     // Queue up file requests until the end of the frame
     struct PagerRequest
     {
-        PagerRequest() {}
+        PagerRequest() : _priority(0.0f), _databaseRequest(0) {}
         PagerRequest(const PagerRequest& rhs) :
             _fileName(rhs._fileName), _group(rhs._group),
-            _priority(rhs._priority), _frameStamp(rhs._frameStamp) {}
+            _priority(rhs._priority), _frameStamp(rhs._frameStamp),
+            _options(rhs._options), _databaseRequest(rhs._databaseRequest) {}
+
         PagerRequest(const std::string& fileName, osg::Group* group,
-                     float priority, osg::FrameStamp* frameStamp) :
+                     float priority, osg::FrameStamp* frameStamp,
+                     osg::ref_ptr<Referenced>& databaseRequest,
+                     osgDB::ReaderWriter::Options* options):
             _fileName(fileName), _group(group), _priority(priority),
-            _frameStamp(frameStamp) {}
-        void doRequest(SceneryPager* pager)
-        {
-            if (_group->getNumChildren() == 0)
-                pager->requestNodeFile(_fileName, _group.get(), _priority,
-                                       _frameStamp.get());
-        }
+            _frameStamp(frameStamp), _options(options),
+            _databaseRequest(&databaseRequest)
+        {}
+
+        void doRequest(SceneryPager* pager);
         std::string _fileName;
         osg::ref_ptr<osg::Group> _group;
         float _priority;
         osg::ref_ptr<osg::FrameStamp> _frameStamp;
+        osg::ref_ptr<osgDB::ReaderWriter::Options> _options;
+        osg::ref_ptr<osg::Referenced>* _databaseRequest;
     };
     typedef std::vector<PagerRequest> PagerRequestList;
     PagerRequestList _pagerRequests;
@@ -75,5 +81,4 @@ protected:
     virtual ~SceneryPager();
 };
 }
-#define FLIGHTGEAR_SCENERYPAGERHXX 1
 #endif