diff --git a/examples/osgcompositeviewer/osgcompositeviewer.cpp b/examples/osgcompositeviewer/osgcompositeviewer.cpp index 00c36eb57..cbb3e31b7 100644 --- a/examples/osgcompositeviewer/osgcompositeviewer.cpp +++ b/examples/osgcompositeviewer/osgcompositeviewer.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include @@ -139,12 +140,18 @@ int main( int argc, char **argv ) osgViewer::CompositeViewer viewer; + + if (arguments.read("-1")) { { osgViewer::View* view = new osgViewer::View; view->setSceneData(osgDB::readNodeFile("fountain.osg")); - + + osg::ref_ptr statsHandler = new osgViewer::StatsHandler; + view->addEventHandler( statsHandler.get() ); + + view->setUpViewAcrossAllScreens(); view->setCameraManipulator(new osgGA::TrackballManipulator); viewer.addView(view); @@ -179,6 +186,10 @@ int main( int argc, char **argv ) view->setSceneData(scene.get()); view->setCameraManipulator(new osgGA::TrackballManipulator); + osg::ref_ptr statsHandler = new osgViewer::StatsHandler; + view->addEventHandler( statsHandler.get() ); + + // add the handler for doing the picking view->addEventHandler(new PickHandler()); } @@ -237,6 +248,9 @@ int main( int argc, char **argv ) statesetManipulator->setStateSet(view->getCamera()->getOrCreateStateSet()); view->addEventHandler( statesetManipulator.get() ); + + osg::ref_ptr statsHandler = new osgViewer::StatsHandler; + view->addEventHandler( statsHandler.get() ); } // view two diff --git a/include/osgViewer/View b/include/osgViewer/View index b82cb7662..f5598755c 100644 --- a/include/osgViewer/View +++ b/include/osgViewer/View @@ -175,6 +175,12 @@ class OSGVIEWER_EXPORT View : public osg::View, public osgGA::GUIActionAdapter virtual void requestRedraw(); virtual void requestContinuousUpdate(bool needed=true); virtual void requestWarpPointer(float x,float y); + + typedef std::vector Cameras; + void getCameras(Cameras& cameras, bool onlyActive=true); + + typedef std::vector Contexts; + void getContexts(Contexts& contexts, bool onlyValid=true); public: diff --git a/include/osgViewer/Viewer b/include/osgViewer/Viewer index 62bde08b3..b53d64c4e 100644 --- a/include/osgViewer/Viewer +++ b/include/osgViewer/Viewer @@ -180,14 +180,8 @@ class OSGVIEWER_EXPORT Viewer : public osgViewer::View osg::Camera* getCameraWithFocus() { return _cameraWithFocus.get(); } const osg::Camera* getCameraWithFocus() const { return _cameraWithFocus.get(); } - typedef std::vector Contexts; - void getContexts(Contexts& contexts, bool onlyValid=true); - typedef std::vector Windows; void getWindows(Windows& windows, bool onlyValid=true); - - typedef std::vector Cameras; - void getCameras(Cameras& cameras, bool onlyActive=true); typedef std::vector Threads; void getAllThreads(Threads& threads, bool onlyActive=true); diff --git a/include/osgViewer/ViewerEventHandlers b/include/osgViewer/ViewerEventHandlers index 2a4fda3eb..3481dcb73 100644 --- a/include/osgViewer/ViewerEventHandlers +++ b/include/osgViewer/ViewerEventHandlers @@ -101,7 +101,7 @@ class OSGVIEWER_EXPORT StatsHandler : public osgGA::GUIEventHandler protected: - void setUpHUDCamera(osgViewer::Viewer* viewer); + void setUpHUDCamera(osgViewer::View* view); osg::Geometry* createGeometry(const osg::Vec3& pos, float height, const osg::Vec4& colour, unsigned int numBlocks); @@ -111,7 +111,7 @@ class OSGVIEWER_EXPORT StatsHandler : public osgGA::GUIEventHandler osg::Node* createCameraStats(const std::string& font, osg::Vec3& pos, float startBlocks, bool aquireGPUStats, float characterSize, osg::Stats* viewerStats, osg::Camera* camera); - void setUpScene(osgViewer::Viewer* viewer); + void setUpScene(osgViewer::View* view); void updateThreadingModelText(); @@ -125,7 +125,7 @@ class OSGVIEWER_EXPORT StatsHandler : public osgGA::GUIEventHandler osg::ref_ptr _switch; - osgViewer::Viewer::ThreadingModel _threadingModel; + unsigned int _threadingModel; osg::ref_ptr _threadingModelText; unsigned int _frameRateChildNum; diff --git a/src/osgViewer/CompositeViewer.cpp b/src/osgViewer/CompositeViewer.cpp index 16875c04b..ea6654477 100644 --- a/src/osgViewer/CompositeViewer.cpp +++ b/src/osgViewer/CompositeViewer.cpp @@ -131,6 +131,7 @@ void CompositeViewer::addView(osgViewer::View* view) _views.push_back(view); view->setFrameStamp(_frameStamp.get()); + view->setStats(new osg::Stats("CompositeViewer")); if (threadsWereRuinning) startThreading(); } @@ -661,6 +662,10 @@ void CompositeViewer::frame(double simulationTime) void CompositeViewer::advance(double simulationTime) { if (_done) return; + + double prevousReferenceTime = _frameStamp->getReferenceTime(); + int previousFrameNumber = _frameStamp->getFrameNumber(); + _frameStamp->setFrameNumber(_frameStamp->getFrameNumber()+1); @@ -674,6 +679,24 @@ void CompositeViewer::advance(double simulationTime) { _frameStamp->setSimulationTime(simulationTime); } + + for(Views::iterator vitr = _views.begin(); + vitr != _views.end(); + ++vitr) + { + if ((*vitr)->getStats() && (*vitr)->getStats()->collectStats("frame_rate")) + { + // update previous frame stats + double deltaFrameTime = _frameStamp->getReferenceTime() - prevousReferenceTime; + (*vitr)->getStats()->setAttribute(previousFrameNumber, "Frame duration", deltaFrameTime); + (*vitr)->getStats()->setAttribute(previousFrameNumber, "Frame rate", 1.0/deltaFrameTime); + + // update current frames stats + (*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime()); + } + + } + } void CompositeViewer::setCameraWithFocus(osg::Camera* camera) @@ -703,6 +726,8 @@ void CompositeViewer::eventTraversal() if (_done) return; if (_views.empty()) return; + + double beginEventTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick()); // osg::notify(osg::NOTICE)<<"CompositeViewer::frameEventTraversal()."<getStats() && (*vitr)->getStats()->collectStats("event")) + { + double endEventTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick()); + + // update current frames stats + (*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal begin time", beginEventTraversal); + (*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal end time", endEventTraversal); + (*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal); + } + } } @@ -1041,6 +1084,8 @@ void CompositeViewer::removeUpdateOperation(osg::Operation* operation) void CompositeViewer::updateTraversal() { if (_done) return; + + double beginUpdateTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick()); Scenes scenes; getScenes(scenes); @@ -1101,7 +1146,21 @@ void CompositeViewer::updateTraversal() view->getCamera()->setViewMatrix( view->getCameraManipulator()->getInverseMatrix()); } view->updateSlaves(); + + // stats + if (view->getStats() && view->getStats()->collectStats("update")) + { + double endUpdateTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick()); + + // update current frames stats + view->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal begin time", beginUpdateTraversal); + view->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal end time", endUpdateTraversal); + view->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal time taken", endUpdateTraversal-beginUpdateTraversal); + } + } + + } diff --git a/src/osgViewer/StatsHandler.cpp b/src/osgViewer/StatsHandler.cpp index ca3165e51..f191a708d 100644 --- a/src/osgViewer/StatsHandler.cpp +++ b/src/osgViewer/StatsHandler.cpp @@ -27,7 +27,7 @@ StatsHandler::StatsHandler(): _keyEventPrintsOutStats('S'), _statsType(NO_STATS), _initialized(false), - _threadingModel(osgViewer::Viewer::SingleThreaded), + _threadingModel(0xffff), _frameRateChildNum(0), _viewerChildNum(0), _sceneChildNum(0), @@ -41,15 +41,18 @@ StatsHandler::StatsHandler(): bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) { - osgViewer::Viewer* viewer = dynamic_cast(&aa); - if (!viewer) return false; - if (_threadingModelText.valid() && viewer->getThreadingModel()!=_threadingModel) + osgViewer::View* view = dynamic_cast(&aa); + if (!view) return false; + + osgViewer::Viewer* viewer = dynamic_cast(&aa); + if (viewer && _threadingModelText.valid() && viewer->getThreadingModel()!=_threadingModel) { _threadingModel = viewer->getThreadingModel(); updateThreadingModelText(); } - + + if (ea.getHandled()) return false; switch(ea.getEventType()) @@ -58,30 +61,30 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap { if (ea.getKey()==_keyEventTogglesOnScreenStats) { - if (viewer->getStats()) + if (view->getStats()) { if (!_initialized) { - setUpHUDCamera(viewer); - setUpScene(viewer); + setUpHUDCamera(view); + setUpScene(view); } ++_statsType; if (_statsType==LAST) _statsType = NO_STATS; - osgViewer::Viewer::Cameras cameras; - viewer->getCameras(cameras); + osgViewer::View::Cameras cameras; + view->getCameras(cameras); switch(_statsType) { case(NO_STATS): { - viewer->getStats()->collectStats("frame_rate",false); - viewer->getStats()->collectStats("event",false); - viewer->getStats()->collectStats("update",false); + view->getStats()->collectStats("frame_rate",false); + view->getStats()->collectStats("event",false); + view->getStats()->collectStats("update",false); - for(osgViewer::Viewer::Cameras::iterator itr = cameras.begin(); + for(osgViewer::View::Cameras::iterator itr = cameras.begin(); itr != cameras.end(); ++itr) { @@ -95,7 +98,7 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap } case(FRAME_RATE): { - viewer->getStats()->collectStats("frame_rate",true); + view->getStats()->collectStats("frame_rate",true); _camera->setNodeMask(0xffffffff); _switch->setValue(_frameRateChildNum, true); @@ -103,15 +106,15 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap } case(VIEWER_STATS): { - if (viewer->getDatabasePager() && viewer->getDatabasePager()->isRunning()) + if (view->getDatabasePager() && view->getDatabasePager()->isRunning()) { - viewer->getDatabasePager()->resetStats(); + view->getDatabasePager()->resetStats(); } - viewer->getStats()->collectStats("event",true); - viewer->getStats()->collectStats("update",true); + view->getStats()->collectStats("event",true); + view->getStats()->collectStats("update",true); - for(osgViewer::Viewer::Cameras::iterator itr = cameras.begin(); + for(osgViewer::View::Cameras::iterator itr = cameras.begin(); itr != cameras.end(); ++itr) { @@ -141,16 +144,16 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap } if (ea.getKey()==_keyEventPrintsOutStats) { - if (viewer->getStats()) + if (view->getStats()) { osg::notify(osg::NOTICE)< StatsList; StatsList statsList; - statsList.push_back(viewer->getStats()); + statsList.push_back(view->getStats()); - osgViewer::Viewer::Contexts contexts; - viewer->getContexts(contexts); - for(osgViewer::Viewer::Contexts::iterator gcitr = contexts.begin(); + osgViewer::View::Contexts contexts; + view->getContexts(contexts); + for(osgViewer::View::Contexts::iterator gcitr = contexts.begin(); gcitr != contexts.end(); ++gcitr) { @@ -166,7 +169,7 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap } } - for(int i = viewer->getStats()->getEarliestFrameNumber(); i<= viewer->getStats()->getLatestFrameNumber()-1; ++i) + for(int i = view->getStats()->getEarliestFrameNumber(); i<= view->getStats()->getLatestFrameNumber()-1; ++i) { for(StatsList::iterator itr = statsList.begin(); itr != statsList.end(); @@ -198,6 +201,8 @@ void StatsHandler::updateThreadingModelText() case(osgViewer::Viewer::DrawThreadPerContext): _threadingModelText->setText("ThreadingModel: DrawThreadPerContext"); break; case(osgViewer::Viewer::CullThreadPerCameraDrawThreadPerContext): _threadingModelText->setText("ThreadingModel: CullThreadPerCameraDrawThreadPerContext"); break; case(osgViewer::Viewer::AutomaticSelection): _threadingModelText->setText("ThreadingModel: AutomaticSelection"); break; + default: + _threadingModelText->setText("ThreadingModel: unknown"); break; } } @@ -207,11 +212,16 @@ void StatsHandler::reset() _camera->setGraphicsContext(0); } -void StatsHandler::setUpHUDCamera(osgViewer::Viewer* viewer) +void StatsHandler::setUpHUDCamera(osgViewer::View* view) { + + + osgViewer::GraphicsWindow* window = dynamic_cast(_camera->getGraphicsContext()); - - if (!window) + osgViewer::Viewer* viewer = dynamic_cast(view); + osg::GraphicsContext* context; + + if (viewer && !window) { osgViewer::Viewer::Windows windows; viewer->getWindows(windows); @@ -220,10 +230,16 @@ void StatsHandler::setUpHUDCamera(osgViewer::Viewer* viewer) window = windows.front(); - _camera->setGraphicsContext(window); + + context = window; } + else if (!viewer) + { + context = view->getCamera()->getGraphicsContext(); + } + _camera->setGraphicsContext(context); - _camera->setViewport(0, 0, window->getTraits()->width, window->getTraits()->height); + _camera->setViewport(0, 0, context->getTraits()->width, context->getTraits()->height); _camera->setRenderOrder(osg::Camera::POST_RENDER, 10); _camera->setProjectionMatrix(osg::Matrix::ortho2D(0,1280,0,1024)); @@ -533,7 +549,7 @@ osg::Geometry* StatsHandler::createTick(const osg::Vec3& pos, float height, cons return geometry; } -void StatsHandler::setUpScene(osgViewer::Viewer* viewer) +void StatsHandler::setUpScene(osgViewer::View* view) { _switch = new osg::Switch; @@ -551,15 +567,15 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer) // collect all the relevant camers typedef std::vector Cameras; Cameras cameras; - if (viewer->getCamera()->getStats() && viewer->getCamera()->getGraphicsContext()) + if (view->getCamera()->getStats() && view->getCamera()->getGraphicsContext()) { - cameras.push_back(viewer->getCamera()); + cameras.push_back(view->getCamera()); } - for(unsigned int si=0; sigetNumSlaves(); ++si) + for(unsigned int si=0; sigetNumSlaves(); ++si) { - if (viewer->getSlave(si)._camera->getStats() && viewer->getSlave(si)._camera->getGraphicsContext()) + if (view->getSlave(si)._camera->getStats() && view->getSlave(si)._camera->getGraphicsContext()) { - cameras.push_back(viewer->getSlave(si)._camera.get()); + cameras.push_back(view->getSlave(si)._camera.get()); } } @@ -621,7 +637,7 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer) frameRateValue->setPosition(pos); frameRateValue->setText("0.0"); - frameRateValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Frame rate",-1, true, 1.0)); + frameRateValue->setDrawCallback(new TextDrawCallback(view->getStats(),"Frame rate",-1, true, 1.0)); pos.y() -= characterSize*1.5f; @@ -680,11 +696,11 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer) eventValue->setPosition(pos); eventValue->setText("0.0"); - eventValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Event traversal time taken",-1, false, 1000.0)); + eventValue->setDrawCallback(new TextDrawCallback(view->getStats(),"Event traversal time taken",-1, false, 1000.0)); pos.x() = startBlocks; osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorUpdateAlpha, _numBlocks); - geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, viewer->getStats(), viewer->getStats(), "Event traversal begin time", "Event traversal end time", -1, _numBlocks)); + geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, view->getStats(), view->getStats(), "Event traversal begin time", "Event traversal end time", -1, _numBlocks)); geode->addDrawable(geometry); pos.y() -= characterSize*1.5f; @@ -713,11 +729,11 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer) updateValue->setPosition(pos); updateValue->setText("0.0"); - updateValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Update traversal time taken",-1, false, 1000.0)); + updateValue->setDrawCallback(new TextDrawCallback(view->getStats(),"Update traversal time taken",-1, false, 1000.0)); pos.x() = startBlocks; osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorUpdateAlpha, _numBlocks); - geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, viewer->getStats(), viewer->getStats(), "Update traversal begin time", "Update traversal end time", -1, _numBlocks)); + geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, view->getStats(), view->getStats(), "Update traversal begin time", "Update traversal end time", -1, _numBlocks)); geode->addDrawable(geometry); pos.y() -= characterSize*1.5f; @@ -731,7 +747,7 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer) citr != cameras.end(); ++citr) { - group->addChild(createCameraStats(font, pos, startBlocks, aquireGPUStats, characterSize, viewer->getStats(), *citr)); + group->addChild(createCameraStats(font, pos, startBlocks, aquireGPUStats, characterSize, view->getStats(), *citr)); } @@ -750,12 +766,12 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer) geode->addDrawable(ticks); osg::Geometry* frameMarkers = createFrameMarkers(pos, height, colourTicks, _numBlocks + 1); - frameMarkers->setDrawCallback(new FrameMarkerDrawCallback(this, startBlocks, viewer->getStats(), 0, _numBlocks + 1)); + frameMarkers->setDrawCallback(new FrameMarkerDrawCallback(this, startBlocks, view->getStats(), 0, _numBlocks + 1)); geode->addDrawable(frameMarkers); } - osgDB::DatabasePager* dp = viewer->getDatabasePager(); + osgDB::DatabasePager* dp = view->getDatabasePager(); if (dp && dp->isRunning()) { pos.y() -= characterSize*1.5f; diff --git a/src/osgViewer/View.cpp b/src/osgViewer/View.cpp index 9df6770e3..a3f825a34 100644 --- a/src/osgViewer/View.cpp +++ b/src/osgViewer/View.cpp @@ -1625,3 +1625,85 @@ bool View::computeIntersections(float x,float y, osg::NodePath& nodePath, osgUti return false; } } + +void View::getCameras(Cameras& cameras, bool onlyActive) +{ + cameras.clear(); + + if (_camera.valid() && + (!onlyActive || (_camera->getGraphicsContext() && _camera->getGraphicsContext()->valid())) ) cameras.push_back(_camera.get()); + + for(Slaves::iterator itr = _slaves.begin(); + itr != _slaves.end(); + ++itr) + { + if (itr->_camera.valid() && + (!onlyActive || (itr->_camera->getGraphicsContext() && itr->_camera->getGraphicsContext()->valid())) ) cameras.push_back(itr->_camera.get()); + } + +} + +struct LessGraphicsContext +{ + bool operator () (const osg::GraphicsContext* lhs, const osg::GraphicsContext* rhs) const + { + int screenLeft = lhs->getTraits()? lhs->getTraits()->screenNum : 0; + int screenRight = rhs->getTraits()? rhs->getTraits()->screenNum : 0; + if (screenLeft < screenRight) return true; + if (screenLeft > screenRight) return false; + + screenLeft = lhs->getTraits()? lhs->getTraits()->x : 0; + screenRight = rhs->getTraits()? rhs->getTraits()->x : 0; + if (screenLeft < screenRight) return true; + if (screenLeft > screenRight) return false; + + screenLeft = lhs->getTraits()? lhs->getTraits()->y : 0; + screenRight = rhs->getTraits()? rhs->getTraits()->y : 0; + if (screenLeft < screenRight) return true; + if (screenLeft > screenRight) return false; + + return lhs < rhs; + } +}; + + + +void View::getContexts(Contexts& contexts, bool onlyValid) +{ + typedef std::set ContextSet; + ContextSet contextSet; + + if (_camera.valid() && + _camera->getGraphicsContext() && + (_camera->getGraphicsContext()->valid() || !onlyValid)) + { + contextSet.insert(_camera->getGraphicsContext()); + } + + for(unsigned int i=0; igetGraphicsContext() && + (slave._camera->getGraphicsContext()->valid() || !onlyValid)) + { + contextSet.insert(slave._camera->getGraphicsContext()); + } + } + + contexts.clear(); + contexts.reserve(contextSet.size()); + + for(ContextSet::iterator itr = contextSet.begin(); + itr != contextSet.end(); + ++itr) + { + contexts.push_back(const_cast(*itr)); + } + + if (contexts.size()>=2) + { + std::sort(contexts.begin(), contexts.end(), LessGraphicsContext()); + } +} + diff --git a/src/osgViewer/Viewer.cpp b/src/osgViewer/Viewer.cpp index 996363426..f41248016 100644 --- a/src/osgViewer/Viewer.cpp +++ b/src/osgViewer/Viewer.cpp @@ -824,67 +824,8 @@ void Viewer::checkWindowStatus() } -struct LessGraphicsContext -{ - bool operator () (const osg::GraphicsContext* lhs, const osg::GraphicsContext* rhs) const - { - int screenLeft = lhs->getTraits()? lhs->getTraits()->screenNum : 0; - int screenRight = rhs->getTraits()? rhs->getTraits()->screenNum : 0; - if (screenLeft < screenRight) return true; - if (screenLeft > screenRight) return false; - screenLeft = lhs->getTraits()? lhs->getTraits()->x : 0; - screenRight = rhs->getTraits()? rhs->getTraits()->x : 0; - if (screenLeft < screenRight) return true; - if (screenLeft > screenRight) return false; - screenLeft = lhs->getTraits()? lhs->getTraits()->y : 0; - screenRight = rhs->getTraits()? rhs->getTraits()->y : 0; - if (screenLeft < screenRight) return true; - if (screenLeft > screenRight) return false; - - return lhs < rhs; - } -}; - -void Viewer::getContexts(Contexts& contexts, bool onlyValid) -{ - typedef std::set ContextSet; - ContextSet contextSet; - - if (_camera.valid() && - _camera->getGraphicsContext() && - (_camera->getGraphicsContext()->valid() || !onlyValid)) - { - contextSet.insert(_camera->getGraphicsContext()); - } - - for(unsigned int i=0; igetGraphicsContext() && - (slave._camera->getGraphicsContext()->valid() || !onlyValid)) - { - contextSet.insert(slave._camera->getGraphicsContext()); - } - } - - contexts.clear(); - contexts.reserve(contextSet.size()); - - for(ContextSet::iterator itr = contextSet.begin(); - itr != contextSet.end(); - ++itr) - { - contexts.push_back(const_cast(*itr)); - } - - if (contexts.size()>=2) - { - std::sort(contexts.begin(), contexts.end(), LessGraphicsContext()); - } -} void Viewer::getWindows(Windows& windows, bool onlyValid) { @@ -902,22 +843,6 @@ void Viewer::getWindows(Windows& windows, bool onlyValid) } } -void Viewer::getCameras(Cameras& cameras, bool onlyActive) -{ - cameras.clear(); - - if (_camera.valid() && - (!onlyActive || (_camera->getGraphicsContext() && _camera->getGraphicsContext()->valid())) ) cameras.push_back(_camera.get()); - - for(Slaves::iterator itr = _slaves.begin(); - itr != _slaves.end(); - ++itr) - { - if (itr->_camera.valid() && - (!onlyActive || (itr->_camera->getGraphicsContext() && itr->_camera->getGraphicsContext()->valid())) ) cameras.push_back(itr->_camera.get()); - } - -} void Viewer::getAllThreads(Threads& threads, bool onlyActive) {