forked from Mirrorlandia_minetest/minetest
Android: Pause rendering while the app is paused (#14058)
This commit is contained in:
parent
b1aec1b5c8
commit
00d9d96e48
@ -4010,31 +4010,6 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
|
||||
*/
|
||||
client->getParticleManager()->step(dtime);
|
||||
|
||||
/*
|
||||
Fog
|
||||
*/
|
||||
if (m_cache_enable_fog) {
|
||||
driver->setFog(
|
||||
sky->getBgColor(),
|
||||
video::EFT_FOG_LINEAR,
|
||||
runData.fog_range * sky->getFogStart(),
|
||||
runData.fog_range * 1.0,
|
||||
0.01,
|
||||
false, // pixel fog
|
||||
true // range fog
|
||||
);
|
||||
} else {
|
||||
driver->setFog(
|
||||
sky->getBgColor(),
|
||||
video::EFT_FOG_LINEAR,
|
||||
100000 * BS,
|
||||
110000 * BS,
|
||||
0.01f,
|
||||
false, // pixel fog
|
||||
false // range fog
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
Damage camera tilt
|
||||
*/
|
||||
@ -4134,7 +4109,8 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
|
||||
/*
|
||||
==================== Drawing begins ====================
|
||||
*/
|
||||
drawScene(graph, stats);
|
||||
if (RenderingEngine::shouldRender())
|
||||
drawScene(graph, stats);
|
||||
/*
|
||||
==================== End scene ====================
|
||||
*/
|
||||
@ -4214,10 +4190,39 @@ void Game::updateShadows()
|
||||
|
||||
void Game::drawScene(ProfilerGraph *graph, RunStats *stats)
|
||||
{
|
||||
const video::SColor skycolor = this->sky->getSkyColor();
|
||||
const video::SColor bg_color = this->sky->getBgColor();
|
||||
const video::SColor sky_color = this->sky->getSkyColor();
|
||||
|
||||
/*
|
||||
Fog
|
||||
*/
|
||||
if (this->m_cache_enable_fog) {
|
||||
this->driver->setFog(
|
||||
bg_color,
|
||||
video::EFT_FOG_LINEAR,
|
||||
this->runData.fog_range * this->sky->getFogStart(),
|
||||
this->runData.fog_range * 1.0f,
|
||||
0.01f,
|
||||
false, // pixel fog
|
||||
true // range fog
|
||||
);
|
||||
} else {
|
||||
this->driver->setFog(
|
||||
bg_color,
|
||||
video::EFT_FOG_LINEAR,
|
||||
100000 * BS,
|
||||
110000 * BS,
|
||||
0.01f,
|
||||
false, // pixel fog
|
||||
false // range fog
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
Drawing
|
||||
*/
|
||||
TimeTaker tt_draw("Draw scene", nullptr, PRECISION_MICRO);
|
||||
this->driver->beginScene(true, true, skycolor);
|
||||
this->driver->beginScene(true, true, sky_color);
|
||||
|
||||
const LocalPlayer *player = this->client->getEnv().getLocalPlayer();
|
||||
bool draw_wield_tool = (this->m_game_ui->m_flags.show_hud &&
|
||||
@ -4230,7 +4235,7 @@ void Game::drawScene(ProfilerGraph *graph, RunStats *stats)
|
||||
if (this->isNoCrosshairAllowed())
|
||||
draw_crosshair = false;
|
||||
#endif
|
||||
this->m_rendering_engine->draw_scene(skycolor, this->m_game_ui->m_flags.show_hud,
|
||||
this->m_rendering_engine->draw_scene(sky_color, this->m_game_ui->m_flags.show_hud,
|
||||
this->m_game_ui->m_flags.show_minimap, draw_wield_tool, draw_crosshair);
|
||||
|
||||
/*
|
||||
|
@ -138,6 +138,17 @@ public:
|
||||
const irr::core::dimension2d<u32> initial_screen_size,
|
||||
const bool initial_window_maximized);
|
||||
|
||||
static bool shouldRender()
|
||||
{
|
||||
// On Android, pause rendering while the app is in background (generally not visible).
|
||||
// Don't do this on desktop because windows can be partially visible.
|
||||
#ifdef __ANDROID__
|
||||
return get_raw_device()->isWindowActive();
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
};
|
||||
|
||||
private:
|
||||
v2u32 _getWindowSize() const;
|
||||
|
||||
|
@ -265,35 +265,36 @@ void GUIEngine::run()
|
||||
f32 dtime = 0.0f;
|
||||
|
||||
while (m_rendering_engine->run() && (!m_startgame) && (!m_kill)) {
|
||||
if (RenderingEngine::shouldRender()) {
|
||||
// check if we need to update the "upper left corner"-text
|
||||
if (text_height != g_fontengine->getTextHeight()) {
|
||||
updateTopLeftTextSize();
|
||||
text_height = g_fontengine->getTextHeight();
|
||||
}
|
||||
|
||||
//check if we need to update the "upper left corner"-text
|
||||
if (text_height != g_fontengine->getTextHeight()) {
|
||||
updateTopLeftTextSize();
|
||||
text_height = g_fontengine->getTextHeight();
|
||||
driver->beginScene(true, true, RenderingEngine::MENU_SKY_COLOR);
|
||||
|
||||
if (m_clouds_enabled)
|
||||
{
|
||||
cloudPreProcess();
|
||||
drawOverlay(driver);
|
||||
}
|
||||
else
|
||||
drawBackground(driver);
|
||||
|
||||
drawFooter(driver);
|
||||
|
||||
m_rendering_engine->get_gui_env()->drawAll();
|
||||
|
||||
// The header *must* be drawn after the menu because it uses
|
||||
// GUIFormspecMenu::getAbsoluteRect().
|
||||
// The header *can* be drawn after the menu because it never intersects
|
||||
// the menu.
|
||||
drawHeader(driver);
|
||||
|
||||
driver->endScene();
|
||||
}
|
||||
|
||||
driver->beginScene(true, true, RenderingEngine::MENU_SKY_COLOR);
|
||||
|
||||
if (m_clouds_enabled)
|
||||
{
|
||||
cloudPreProcess();
|
||||
drawOverlay(driver);
|
||||
}
|
||||
else
|
||||
drawBackground(driver);
|
||||
|
||||
drawFooter(driver);
|
||||
|
||||
m_rendering_engine->get_gui_env()->drawAll();
|
||||
|
||||
// The header *must* be drawn after the menu because it uses
|
||||
// GUIFormspecMenu::getAbsoluteRect().
|
||||
// The header *can* be drawn after the menu because it never intersects
|
||||
// the menu.
|
||||
drawHeader(driver);
|
||||
|
||||
driver->endScene();
|
||||
|
||||
IrrlichtDevice *device = m_rendering_engine->get_raw_device();
|
||||
|
||||
u32 frametime_min = 1000 / (device->isWindowFocused()
|
||||
|
Loading…
Reference in New Issue
Block a user