From 601511e7f40db2073adcebff04407aa37d2ffdb3 Mon Sep 17 00:00:00 2001 From: Benau Date: Fri, 1 Apr 2022 09:59:46 +0800 Subject: [PATCH] Split device polling out of renderLoading --- src/guiengine/engine.cpp | 13 +++++++++++-- src/guiengine/engine.hpp | 3 +++ src/main.cpp | 1 + src/race/race_manager.cpp | 1 + 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/guiengine/engine.cpp b/src/guiengine/engine.cpp index b2dc88a92..8e0afebe8 100644 --- a/src/guiengine/engine.cpp +++ b/src/guiengine/engine.cpp @@ -1531,6 +1531,14 @@ namespace GUIEngine x = ICON_MARGIN; } } +#endif + } // renderLoading + + // ----------------------------------------------------------------------- + + void flushRenderLoading(bool launching) + { +#ifndef SERVER_ONLY // This will avoid no response in windows, also allow showing loading // icon in apple device, because apple device only update render // buffer if you poll the mainloop @@ -1542,7 +1550,7 @@ namespace GUIEngine } // If launch is finished, pause & display the story mode timers - if ( !launching) + if (!launching) { // For speedruns only, display the timer on loading screens if (UserConfigParams::m_speedrun_mode) @@ -1557,7 +1565,7 @@ namespace GUIEngine irr_driver->handleWindowResize(); } #endif - } // renderLoading + } // flushRenderLoading // ----------------------------------------------------------------------- @@ -1571,6 +1579,7 @@ namespace GUIEngine ->beginScene(true, true, video::SColor(255,100,101,140)); renderLoading(false, true, false); g_device->getVideoDriver()->endScene(); + GUIEngine::flushRenderLoading(true/*launching*/); } else { diff --git a/src/guiengine/engine.hpp b/src/guiengine/engine.hpp index 87394bacb..acad0395a 100644 --- a/src/guiengine/engine.hpp +++ b/src/guiengine/engine.hpp @@ -248,6 +248,9 @@ namespace GUIEngine /** \brief renders a "loading" screen */ void renderLoading(bool clearIcons = true, bool launching = false, bool update_tips = true); + /** \brief poll events during rendering to prevent unresponsive window */ + void flushRenderLoading(bool launching); + /** \brief to spice up a bit the loading icon : add icons to the loading screen */ void addLoadingIcon(irr::video::ITexture* icon); diff --git a/src/main.cpp b/src/main.cpp index caf9f5b59..42343b125 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1874,6 +1874,7 @@ void initRest() // Input manager set first so it recieves SDL joystick event GUIEngine::init(device, driver, StateManager::get()); GUIEngine::renderLoading(true, true, false); + GUIEngine::flushRenderLoading(true/*launching*/); #ifdef ANDROID JNIEnv* env = (JNIEnv*)SDL_AndroidGetJNIEnv(); diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index 42d3b3ccc..158c95b62 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -556,6 +556,7 @@ void RaceManager::startNextRace() GUIEngine::clearLoadingTips(); GUIEngine::renderLoading(true/*clearIcons*/, false/*launching*/, false/*update_tips*/); device->getVideoDriver()->endScene(); + GUIEngine::flushRenderLoading(false/*launching*/); } m_num_finished_karts = 0;