]> git.mxchange.org Git - flightgear.git/blobdiff - src/Viewer/fg_os_osgviewer.cxx
commradio: improvements for atis speech
[flightgear.git] / src / Viewer / fg_os_osgviewer.cxx
index 976b3d753e96fe86ff562f74f87a54d03574e0b6..7ba9932180ae44d6d6a0f73b639110d319d4c3c9 100644 (file)
@@ -102,7 +102,6 @@ using namespace flightgear;
 using namespace osg;
 
 osg::ref_ptr<osgViewer::Viewer> viewer;
-static osg::ref_ptr<osg::Camera> mainCamera;
 
 static void setStereoMode( const char * mode )
 {
@@ -286,7 +285,9 @@ void fgOSOpenWindow(bool stencil)
 void fgOSResetProperties()
 {
     SGPropertyNode* osgLevel = fgGetNode("/sim/rendering/osg-notify-level", true);
-    osgLevel->addChangeListener(new NotifyLevelListener, true);
+    NotifyLevelListener* l = new NotifyLevelListener;
+    globals->addListenerToCleanup(l);
+    osgLevel->addChangeListener(l, true);
     
     osg::Camera* guiCamera = getGUICamera(CameraGroup::getDefault());
     if (guiCamera) {
@@ -314,6 +315,11 @@ void fgOSExit(int code)
     viewer->setDone(true);
     viewer->getDatabasePager()->cancel();
     status = code;
+    
+    // otherwise we crash if OSG does logging during static destruction, eg
+    // GraphicsWindowX11, since OSG statics may have been created before the
+    // sglog static, despite our best efforts in boostrap.cxx
+    osg::setNotifyHandler(new osg::StandardNotifyHandler);
 }
 
 int fgOSMainLoop()
@@ -355,7 +361,6 @@ void fgOSInit(int* argc, char** argv)
 void fgOSCloseWindow()
 {
     FGScenery::resetPagerSingleton();
-    mainCamera = NULL;
     flightgear::CameraGroup::setDefault(NULL);
     WindowSystemAdapter::setWSA(NULL);
     viewer = NULL;