void CompositeViewer::getContexts(Contexts& contexts, bool onlyValid) { typedef std::set<osg::GraphicsContext*> ContextSet; ContextSet contextSet; for(RefViews::iterator vitr = _views.begin(); vitr != _views.end(); ++vitr) { osgViewer::View* view = vitr->get(); if (view->getCamera() && view->getCamera()->getGraphicsContext() && (view->getCamera()->getGraphicsContext()->valid() || !onlyValid)) { contextSet.insert(view->getCamera()->getGraphicsContext()); } for(unsigned int i=0; i<view->getNumSlaves(); ++i) { View::Slave& slave = view->getSlave(i); if (slave._camera.valid() && slave._camera->getGraphicsContext() && (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<osg::GraphicsContext*>(*itr)); } }