perf: Don't rebuild images (=reload and rebuild atlases) when loading game, if the set of mods has not changed

This commit is contained in:
yairm210 2025-01-27 18:00:10 +02:00
parent d0dea2d9d7
commit 46fe257fc0
2 changed files with 6 additions and 3 deletions

View File

@ -242,7 +242,7 @@ open class UncivGame(val isConsoleMode: Boolean = false) : Game(), PlatformSpeci
/** The new game info may have different mods or rulesets, which may use different resources that need to be loaded. */
private suspend fun initializeResources(newGameInfo: GameInfo) {
withGLContext {
ImageGetter.setNewRuleset(newGameInfo.ruleset)
ImageGetter.setNewRuleset(newGameInfo.ruleset, true)
}
val fullModList = newGameInfo.gameParameters.getModsAndBaseRuleset()
musicController.setModList(fullModList)
@ -337,7 +337,7 @@ open class UncivGame(val isConsoleMode: Boolean = false) : Game(), PlatformSpeci
// Re-initialize translations, images etc. that may have been 'lost' when we were playing around in NewGameScreen
val ruleset = worldScreen.gameInfo.ruleset
translations.translationActiveMods = ruleset.mods
ImageGetter.setNewRuleset(ruleset)
ImageGetter.setNewRuleset(ruleset, true)
setScreen(worldScreen)
return worldScreen

View File

@ -80,7 +80,10 @@ object ImageGetter {
fun reloadImages() = setNewRuleset(ruleset)
/** Required every time the ruleset changes, in order to load mod-specific images */
fun setNewRuleset(ruleset: Ruleset) {
fun setNewRuleset(ruleset: Ruleset, ignoreIfModsAreEqual: Boolean = false) {
if (ignoreIfModsAreEqual && ruleset.mods == ImageGetter.ruleset.mods)
return
ImageGetter.ruleset = ruleset
textureRegionDrawables.clear()