void fgOSInit(int* argc, char** argv);
void fgOSOpenWindow(bool stencil);
+void fgOSCloseWindow();
void fgOSFullScreen();
int fgOSMainLoop();
void fgOSExit(int code);
// pass control off to the master event handler
int result = fgOSMainLoop();
+ fgOSCloseWindow();
// clean up here; ensure we null globals to avoid
// confusing the atexit() handler
return false;
}
+static osg::ref_ptr<SceneryPager> pager;
+
SceneryPager* FGScenery::getPagerSingleton()
{
- static osg::ref_ptr<SceneryPager> pager = new SceneryPager;
+ if (!pager)
+ pager = new SceneryPager;
return pager.get();
}
+void FGScenery::resetPagerSingleton()
+{
+ pager = NULL;
+}
+
// Static because access to the pager is needed before the rest of
// the scenery is initialized.
static flightgear::SceneryPager* getPagerSingleton();
+ static void resetPagerSingleton();
+
flightgear::SceneryPager* getPager() { return _pager.get(); }
};
WindowSystemAdapter::setWSA(new WindowSystemAdapter);
}
+void fgOSCloseWindow()
+{
+ FGScenery::resetPagerSingleton();
+ mainCamera = NULL;
+ flightgear::CameraGroup::setDefault(NULL);
+ WindowSystemAdapter::setWSA(NULL);
+ viewer = NULL;
+}
+
void fgOSFullScreen()
{
std::vector<osgViewer::GraphicsWindow*> windows;
void fgSetMouseCursor(int cursor)
{
_cursor = cursor;
-
+ if (!viewer)
+ return;
+
std::vector<osgViewer::GraphicsWindow*> windows;
viewer->getWindows(windows);
BOOST_FOREACH(osgViewer::GraphicsWindow* gw, windows) {