From fbec168e91026b70fd989e7f46bea7140328076e Mon Sep 17 00:00:00 2001
From: grorp <gregor.parzefall@posteo.de>
Date: Sat, 27 Jan 2024 14:37:00 +0100
Subject: [PATCH] Only pause rendering if the Android activity is stopped
 (#14211)

---
 src/client/game.cpp          |  2 +-
 src/client/renderingengine.h | 11 -----------
 src/gui/guiEngine.cpp        |  5 ++---
 3 files changed, 3 insertions(+), 15 deletions(-)

diff --git a/src/client/game.cpp b/src/client/game.cpp
index 1e62b4b7c..546dfa7ec 100644
--- a/src/client/game.cpp
+++ b/src/client/game.cpp
@@ -4207,7 +4207,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
 	/*
 		==================== Drawing begins ====================
 	*/
-	if (RenderingEngine::shouldRender())
+	if (device->isWindowVisible())
 		drawScene(graph, stats);
 	/*
 		==================== End scene ====================
diff --git a/src/client/renderingengine.h b/src/client/renderingengine.h
index 06c3157d5..7d2291172 100644
--- a/src/client/renderingengine.h
+++ b/src/client/renderingengine.h
@@ -141,17 +141,6 @@ 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;
 
diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp
index 4bb7b041f..1ae463e37 100644
--- a/src/gui/guiEngine.cpp
+++ b/src/gui/guiEngine.cpp
@@ -231,6 +231,7 @@ bool GUIEngine::loadMainMenuScript()
 /******************************************************************************/
 void GUIEngine::run()
 {
+	IrrlichtDevice *device = m_rendering_engine->get_raw_device();
 	// Always create clouds because they may or may not be
 	// needed based on the game selected
 	video::IVideoDriver *driver = m_rendering_engine->get_video_driver();
@@ -265,7 +266,7 @@ void GUIEngine::run()
 	f32 dtime = 0.0f;
 
 	while (m_rendering_engine->run() && (!m_startgame) && (!m_kill)) {
-		if (RenderingEngine::shouldRender()) {
+		if (device->isWindowVisible()) {
 			// check if we need to update the "upper left corner"-text
 			if (text_height != g_fontengine->getTextHeight()) {
 				updateTopLeftTextSize();
@@ -295,8 +296,6 @@ void GUIEngine::run()
 			driver->endScene();
 		}
 
-		IrrlichtDevice *device = m_rendering_engine->get_raw_device();
-
 		u32 frametime_min = 1000 / (device->isWindowFocused()
 			? g_settings->getFloat("fps_max")
 			: g_settings->getFloat("fps_max_unfocused"));