]> git.mxchange.org Git - flightgear.git/commitdiff
Reset work, fix time-slew on OSG event handling.
authorJames Turner <zakalawe@mac.com>
Mon, 13 Jan 2014 14:46:38 +0000 (14:46 +0000)
committerJames Turner <zakalawe@mac.com>
Mon, 13 Jan 2014 20:13:34 +0000 (20:13 +0000)
src/Main/fg_init.cxx
src/Viewer/renderer.cxx

index 8de7deda1962b4b6d5681467a2a487ffefe7387c..cdba3a14483ac2dc1e2823b6f0255896eadf141d 100644 (file)
@@ -1022,14 +1022,15 @@ void fgStartNewReset()
     globals->set_renderer(render);
     render->init();
     render->setViewer(viewer.get());
+
     viewer->getDatabasePager()->setUpThreads(1, 1);
-    render->splashinit();
     
+    // must do this before splashinit for Rembrandt
     flightgear::CameraGroup::buildDefaultGroup(viewer.get());
-
+    render->splashinit();
+    
     fgOSResetProperties();
 
-    
 // init some things manually
 // which do not follow the regular init pattern
     
index d982056e0b4e9e05f90223f81549484acef8e8be..098ffe9606d29749e26441a8f8bb2372544b1891 100644 (file)
@@ -433,9 +433,9 @@ FGRenderer::~FGRenderer()
     }
     
     // replace the viewer's scene completely
-    if (getViewer())
+    if (getViewer()) {
         getViewer()->setSceneData(new osg::Group);
-    
+    }
     
 #ifdef FG_JPEG_SERVER
    jpgRenderFrame = NULL;
@@ -448,11 +448,15 @@ FGRenderer::~FGRenderer()
 // critical parts of the scene graph in addition to the splash screen.
 void
 FGRenderer::splashinit( void )
-      {
+{
+    // important that we reset the viewer sceneData here, to ensure the reference
+    // time for everything is in sync; otherwise on reset the Viewer and
+    // GraphicsWindow clocks are out of sync.
     osgViewer::Viewer* viewer = getViewer();
     viewer->setName("osgViewer");
-    _viewerSceneRoot = dynamic_cast<osg::Group*>(viewer->getSceneData());
+    _viewerSceneRoot = new osg::Group;
     _viewerSceneRoot->setName("viewerSceneRoot");
+    viewer->setSceneData(_viewerSceneRoot);
     
     ref_ptr<Node> splashNode = fgCreateSplashNode();
     if (_classicalRenderer) {
@@ -470,7 +474,8 @@ FGRenderer::splashinit( void )
         }
     }
     
-    _frameStamp = viewer->getFrameStamp();
+    _frameStamp = new osg::FrameStamp;
+    viewer->setFrameStamp(_frameStamp.get());
     // Scene doesn't seem to pass the frame stamp to the update
     // visitor automatically.
     _updateVisitor->setFrameStamp(_frameStamp.get());