From 990c04d4b907bd32851bc07b28f2288d1c0a357e Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 29 Jun 2016 15:34:11 +0100 Subject: [PATCH] Moved the scene related requiresUpdateSceneGraph() implementation details from View into Scene. Added check against the ImagePager. --- include/osgViewer/Scene | 4 +++- src/osgViewer/Scene.cpp | 16 +++++++++++++++- src/osgViewer/View.cpp | 10 ++-------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/include/osgViewer/Scene b/include/osgViewer/Scene index d6f4cba6a..84fc06db5 100644 --- a/include/osgViewer/Scene +++ b/include/osgViewer/Scene @@ -45,7 +45,9 @@ class OSGVIEWER_EXPORT Scene : public osg::Referenced osgDB::ImagePager* getImagePager() { return _imagePager.get(); } const osgDB::ImagePager* getImagePager() const { return _imagePager.get(); } - void updateSceneGraph(osg::NodeVisitor& updateVisitor); + virtual bool requiresUpdateSceneGraph() const; + + virtual void updateSceneGraph(osg::NodeVisitor& updateVisitor); /** Get the Scene object that has the specified node assigned to it. diff --git a/src/osgViewer/Scene.cpp b/src/osgViewer/Scene.cpp index 86133b03c..d17ca124d 100644 --- a/src/osgViewer/Scene.cpp +++ b/src/osgViewer/Scene.cpp @@ -19,7 +19,7 @@ using namespace osgViewer; namespace osgViewer { - + struct SceneSingleton { @@ -113,6 +113,20 @@ void Scene::setImagePager(osgDB::ImagePager* ip) _imagePager = ip; } +bool Scene::requiresUpdateSceneGraph() const +{ + // check if the database pager needs to update the scene + if (getDatabasePager()->requiresUpdateSceneGraph() || getDatabasePager()->getRequestsInProgress()) return true; + + // check if the image pager needs to update the scene + if (getImagePager()->requiresUpdateSceneGraph()) return true; + + // check if scene graph needs update traversal + if (_sceneData.valid() && (_sceneData->getUpdateCallback() || (_sceneData->getNumChildrenRequiringUpdateTraversal()>0))) return true; + + return false; +} + void Scene::updateSceneGraph(osg::NodeVisitor& updateVisitor) { if (!_sceneData) return; diff --git a/src/osgViewer/View.cpp b/src/osgViewer/View.cpp index 6ceeca6cd..ecb1ab987 100644 --- a/src/osgViewer/View.cpp +++ b/src/osgViewer/View.cpp @@ -1132,17 +1132,11 @@ void View::removeDevice(osgGA::Device* eventSource) bool View::requiresUpdateSceneGraph() const { - // check if the database pager needs to update the scene - if (getDatabasePager()->requiresUpdateSceneGraph() || getDatabasePager()->getRequestsInProgress()) return true; - // check if there are camera update callbacks if (_camera->getUpdateCallback()) return true; - // check if there are node update callbacks - if (getSceneData() != 0) - { - if (getSceneData()->getUpdateCallback() || (getSceneData()->getNumChildrenRequiringUpdateTraversal()>0)) return true; - } + // check if there scene requires an update traversal + if (_scene.valid() && _scene->requiresUpdateSceneGraph()) return true; return false; }