X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FScenery%2FSceneryPager.cxx;h=9328973ef4c6162deb3c5e1ca60d690a41269106;hb=38226af24ec01e8f0a20d7fd73ef838a69f6ef25;hp=6f79a56eec8e5685f6cb3e9f9ce550d37d1dd816;hpb=94caa0b89182875ee6ee86ea887f07b8717b8dba;p=flightgear.git diff --git a/src/Scenery/SceneryPager.cxx b/src/Scenery/SceneryPager.cxx index 6f79a56ee..9328973ef 100644 --- a/src/Scenery/SceneryPager.cxx +++ b/src/Scenery/SceneryPager.cxx @@ -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& 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(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& 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(_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;