#include <Main/globals.hxx>
#include <Main/fg_props.hxx>
-#include <Main/renderer.hxx>
-#include <Main/viewer.hxx>
+#include <Viewer/renderer.hxx>
+#include <Viewer/viewer.hxx>
#include <Scripting/NasalSys.hxx>
#include "scenery.hxx"
_terra_sync(NULL),
_visibilityMeters(fgGetNode("/environment/visibility-m", true)),
_maxTileRangeM(fgGetNode("/sim/rendering/static-lod/bare", true)),
- _disableNasalHooks(fgGetNode("/sim/temp/disable-scenery-nasal", true))
+ _disableNasalHooks(fgGetNode("/sim/temp/disable-scenery-nasal", true)),
+ _pager(FGScenery::getPagerSingleton())
{
}
void FGTileMgr::reinit()
{
+ // protect against multiple scenery reloads and properly reset flags,
+ // otherwise aircraft fall through the ground while reloading scenery
+ if (!fgGetBool("/sim/sceneryloaded",true))
+ return;
+ fgSetBool("/sim/sceneryloaded",false);
+ fgSetDouble("/sim/startup/splash-alpha", 1.0);
+
+ // Reload the materials definitions
+ _options->setMaterialLib(globals->get_matlib());
+
// remove all old scenery nodes from scenegraph and clear cache
osg::Group* group = globals->get_scenery()->get_terrain_branch();
group->removeChildren(0, group->getNumChildren());
*/
void FGTileMgr::update_queues()
{
- SceneryPager* pager = FGScenery::getPagerSingleton();
osg::FrameStamp* framestamp
= globals->get_renderer()->getViewer()->getFrameStamp();
double current_time = framestamp->getReferenceTime();
e->is_current_view() ))
{
// schedule tile for loading with osg pager
- pager->queueRequest(e->tileFileName,
- e->getNode(),
- e->get_priority(),
- framestamp,
- e->getDatabaseRequest(),
- _options.get());
+ _pager->queueRequest(e->tileFileName,
+ e->getNode(),
+ e->get_priority(),
+ framestamp,
+ e->getDatabaseRequest(),
+ _options.get());
loading++;
}
} else
delete old;
// zeros out subgraph ref_ptr, so subgraph is owned by
// the pager and will be deleted in the pager thread.
- pager->queueDeleteRequest(subgraph);
+ _pager->queueDeleteRequest(subgraph);
if (--drop_count > 0)
drop_index = tile_cache.get_drop_tile();