Small delay before the loading screen shows

Kinda irritating to have the loading bar pop up for a fraction of a second.
openmw-37
scrawl 9 years ago
parent 8552a9d82c
commit 69f234d97b

@ -235,40 +235,64 @@ namespace MWGui
draw(); draw();
} }
void LoadingScreen::draw() bool LoadingScreen::needToDrawLoadingScreen()
{ {
if (mTimer.time_m() > mLastRenderTime + (1.0/mTargetFrameRate) * 1000.0) if ( mTimer.time_m() <= mLastRenderTime + (1.0/mTargetFrameRate) * 1000.0)
return false;
// the minimal delay before a loading screen shows
const float initialDelay = 0.05;
bool alreadyShown = (mLastRenderTime > mLoadingOnTime);
float diff = (mTimer.time_m() - mLoadingOnTime);
if (!alreadyShown)
{ {
bool showWallpaper = (MWBase::Environment::get().getStateManager()->getState() // bump the delay by the current progress - i.e. if during the initial delay the loading
== MWBase::StateManager::State_NoGame); // has almost finished, no point showing the loading screen now
diff -= mProgress / static_cast<float>(mProgressBar->getScrollRange()) * 100.f;
}
if (showWallpaper && mTimer.time_m() > mLastWallpaperChangeTime + 5000*1) bool showWallpaper = (MWBase::Environment::get().getStateManager()->getState()
{ == MWBase::StateManager::State_NoGame);
mLastWallpaperChangeTime = mTimer.time_m(); if (!showWallpaper && diff < initialDelay*1000)
changeWallpaper(); return false;
} return true;
}
// Turn off rendering except the GUI void LoadingScreen::draw()
int oldUpdateMask = mViewer->getUpdateVisitor()->getTraversalMask(); {
int oldCullMask = mViewer->getCamera()->getCullMask(); if (!needToDrawLoadingScreen())
mViewer->getUpdateVisitor()->setTraversalMask(MWRender::Mask_GUI); return;
mViewer->getCamera()->setCullMask(MWRender::Mask_GUI);
bool showWallpaper = (MWBase::Environment::get().getStateManager()->getState()
== MWBase::StateManager::State_NoGame);
if (showWallpaper && mTimer.time_m() > mLastWallpaperChangeTime + 5000*1)
{
mLastWallpaperChangeTime = mTimer.time_m();
changeWallpaper();
}
MWBase::Environment::get().getInputManager()->update(0, true, true); // Turn off rendering except the GUI
int oldUpdateMask = mViewer->getUpdateVisitor()->getTraversalMask();
int oldCullMask = mViewer->getCamera()->getCullMask();
mViewer->getUpdateVisitor()->setTraversalMask(MWRender::Mask_GUI);
mViewer->getCamera()->setCullMask(MWRender::Mask_GUI);
//osg::Timer timer; MWBase::Environment::get().getInputManager()->update(0, true, true);
mViewer->frame(mViewer->getFrameStamp()->getSimulationTime());
//std::cout << "frame took " << timer.time_m() << std::endl;
//if (mViewer->getIncrementalCompileOperation()) //osg::Timer timer;
//std::cout << "num to compile " << mViewer->getIncrementalCompileOperation()->getToCompile().size() << std::endl; mViewer->frame(mViewer->getFrameStamp()->getSimulationTime());
//std::cout << "frame took " << timer.time_m() << std::endl;
// resume 3d rendering //if (mViewer->getIncrementalCompileOperation())
mViewer->getUpdateVisitor()->setTraversalMask(oldUpdateMask); //std::cout << "num to compile " << mViewer->getIncrementalCompileOperation()->getToCompile().size() << std::endl;
mViewer->getCamera()->setCullMask(oldCullMask);
mLastRenderTime = mTimer.time_m(); // resume 3d rendering
} mViewer->getUpdateVisitor()->setTraversalMask(oldUpdateMask);
mViewer->getCamera()->setCullMask(oldCullMask);
mLastRenderTime = mTimer.time_m();
} }
} }

@ -52,6 +52,7 @@ namespace MWGui
private: private:
void findSplashScreens(); void findSplashScreens();
bool needToDrawLoadingScreen();
const VFS::Manager* mVFS; const VFS::Manager* mVFS;
osg::ref_ptr<osgViewer::Viewer> mViewer; osg::ref_ptr<osgViewer::Viewer> mViewer;

Loading…
Cancel
Save