From 4d0eeb8184c79b7d323c522a570c0403daa4469a Mon Sep 17 00:00:00 2001 From: James Turner Date: Mon, 13 Jan 2014 14:46:38 +0000 Subject: [PATCH] Reset work, fix time-slew on OSG event handling. --- src/Main/fg_init.cxx | 7 ++++--- src/Viewer/renderer.cxx | 15 ++++++++++----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index 8de7deda1..cdba3a144 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -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 diff --git a/src/Viewer/renderer.cxx b/src/Viewer/renderer.cxx index d982056e0..098ffe960 100644 --- a/src/Viewer/renderer.cxx +++ b/src/Viewer/renderer.cxx @@ -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(viewer->getSceneData()); + _viewerSceneRoot = new osg::Group; _viewerSceneRoot->setName("viewerSceneRoot"); + viewer->setSceneData(_viewerSceneRoot); ref_ptr 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()); -- 2.39.5