1
0
Fork 0

Splash-screen feedback on scenery download.

This commit is contained in:
James Turner 2013-09-30 16:13:04 +01:00
parent cb087dc4de
commit ad4834c651
3 changed files with 46 additions and 26 deletions

View file

@ -242,7 +242,7 @@ void FGTileMgr::schedule_needed(const SGBucket& curr_bucket, double vis)
* Update the various queues maintained by the tilemagr (private * Update the various queues maintained by the tilemagr (private
* internal function, do not call directly.) * internal function, do not call directly.)
*/ */
void FGTileMgr::update_queues() void FGTileMgr::update_queues(bool& isDownloadingScenery)
{ {
osg::FrameStamp* framestamp osg::FrameStamp* framestamp
= globals->get_renderer()->getViewer()->getFrameStamp(); = globals->get_renderer()->getViewer()->getFrameStamp();
@ -265,22 +265,22 @@ void FGTileMgr::update_queues()
// based on current visibilty // based on current visibilty
e->prep_ssg_node(vis); e->prep_ssg_node(vis);
bool nonExpiredOrCurrent = !e->is_expired(current_time) || e->is_current_view(); if (!e->is_loaded()) {
if ( !e->is_loaded() && bool nonExpiredOrCurrent = !e->is_expired(current_time) || e->is_current_view();
!isTileDirSyncing(e->tileFileName) && bool downloading = isTileDirSyncing(e->tileFileName);
nonExpiredOrCurrent) isDownloadingScenery |= downloading;
{ if ( !downloading && nonExpiredOrCurrent) {
// schedule tile for loading with osg pager // schedule tile for loading with osg pager
_pager->queueRequest(e->tileFileName, _pager->queueRequest(e->tileFileName,
e->getNode(), e->getNode(),
e->get_priority(), e->get_priority(),
framestamp, framestamp,
e->getDatabaseRequest(), e->getDatabaseRequest(),
_options.get()); _options.get());
loading++; loading++;
} }
} else } // of tile not loaded case
{ } else {
SG_LOG(SG_TERRAIN, SG_ALERT, "Warning: empty tile in cache!"); SG_LOG(SG_TERRAIN, SG_ALERT, "Warning: empty tile in cache!");
} }
tile_cache.next(); tile_cache.next();
@ -321,7 +321,8 @@ void FGTileMgr::update(double)
double vis = _visibilityMeters->getDoubleValue(); double vis = _visibilityMeters->getDoubleValue();
schedule_tiles_at(globals->get_view_position(), vis); schedule_tiles_at(globals->get_view_position(), vis);
update_queues(); bool waitingOnTerrasync = false;
update_queues(waitingOnTerrasync);
// scenery loading check, triggers after each sim (tile manager) reinit // scenery loading check, triggers after each sim (tile manager) reinit
if (!_scenery_loaded->getBoolValue()) if (!_scenery_loaded->getBoolValue())
@ -330,6 +331,7 @@ void FGTileMgr::update(double)
bool positionFinalized = fgGetBool("sim/position-finalized"); bool positionFinalized = fgGetBool("sim/position-finalized");
bool sceneryOverride = _scenery_override->getBoolValue(); bool sceneryOverride = _scenery_override->getBoolValue();
// we are done if final position is set and the scenery & FDM are done. // we are done if final position is set and the scenery & FDM are done.
// scenery-override can ignore the last two, but not position finalization. // scenery-override can ignore the last two, but not position finalization.
if (positionFinalized && (sceneryOverride || (isSceneryLoaded() && fdmInited))) if (positionFinalized && (sceneryOverride || (isSceneryLoaded() && fdmInited)))
@ -339,7 +341,14 @@ void FGTileMgr::update(double)
} }
else else
{ {
fgSplashProgress(positionFinalized ? "loading-scenery" : "finalize-position"); if (!positionFinalized) {
fgSplashProgress("finalize-position");
} else if (waitingOnTerrasync) {
fgSplashProgress("downloading-scenery");
} else {
fgSplashProgress("loading-scenery");
}
// be nice to loader threads while waiting for initial scenery, reduce to 20fps // be nice to loader threads while waiting for initial scenery, reduce to 20fps
SGTimeStamp::sleepForMSec(50); SGTimeStamp::sleepForMSec(50);
} }

View file

@ -81,7 +81,7 @@ private:
simgear::SGTerraSync* _terra_sync; simgear::SGTerraSync* _terra_sync;
// update various queues internal queues // update various queues internal queues
void update_queues(); void update_queues(bool& isDownloadingScenery);
// schedule tiles for the viewer bucket // schedule tiles for the viewer bucket
void schedule_tiles_at(const SGGeod& location, double rangeM); void schedule_tiles_at(const SGGeod& location, double rangeM);

View file

@ -402,11 +402,22 @@ void fgSplashProgress( const char *identifier ) {
text = globals->get_locale()->getLocalizedString(id.c_str(), text = globals->get_locale()->getLocalizedString(id.c_str(),
"sys", "<incomplete language resource>"); "sys", "<incomplete language resource>");
} }
if (!strcmp(fgGetString("/sim/startup/splash-progress-text"), text)) { if (!strcmp(fgGetString("/sim/startup/splash-progress-text"), text)) {
return; return;
} }
if (!strcmp(identifier,"downloading-scenery")) {
std::ostringstream oss;
unsigned int kbytesPerSec = fgGetInt("/sim/terrasync/transfer-rate-bytes-sec") / 1024;
oss << text;
if (kbytesPerSec > 0) {
oss << " - " << kbytesPerSec << " KBytes/sec";
}
fgSetString("/sim/startup/splash-progress-text", oss.str());
} else {
SG_LOG( SG_VIEW, SG_INFO, "Splash screen progress " << identifier );
fgSetString("/sim/startup/splash-progress-text", text);
}
SG_LOG( SG_VIEW, SG_INFO, "Splash screen progress " << identifier );
fgSetString("/sim/startup/splash-progress-text", text);
} }