1 #include "SceneryPager.hxx"
5 using namespace flightgear;
9 SceneryPager::SceneryPager()
11 _pagerRequests.reserve(48);
12 _deleteRequests.reserve(16);
15 SceneryPager::SceneryPager(const SceneryPager& rhs) :
20 SceneryPager::~SceneryPager()
24 void SceneryPager::queueRequest(const std::string& fileName, osg::Group* group,
25 float priority, osg::FrameStamp* frameStamp)
27 _pagerRequests.push_back(PagerRequest(fileName, group, priority,
31 void SceneryPager::queueDeleteRequest(osg::ref_ptr<osg::Object>& objptr)
33 _deleteRequests.push_back(objptr);
36 void SceneryPager::signalEndFrame()
39 bool areDeleteRequests = false;
40 bool arePagerRequests = false;
41 if (!_deleteRequests.empty()) {
42 areDeleteRequests = true;
43 OpenThreads::ScopedLock<OpenThreads::Mutex>
44 lock(_childrenToDeleteListMutex);
45 _childrenToDeleteList.insert(_childrenToDeleteList.end(),
46 _deleteRequests.begin(),
47 _deleteRequests.end());
48 _deleteRequests.clear();
50 if (!_pagerRequests.empty()) {
51 arePagerRequests = true;
52 for_each(_pagerRequests.begin(), _pagerRequests.end(),
53 bind2nd(mem_fun_ref(&PagerRequest::doRequest), this));
54 _pagerRequests.clear();
56 if (areDeleteRequests && !arePagerRequests)
57 updateDatabasePagerThreadBlock();
58 DatabasePager::signalEndFrame();