Experimental: mitigate texture swapping with TextureArraySpriteBatch (#8604)

* Performance optimization: less texture swapping

* Added experimental setting to Options-Display

---------

Co-authored-by: tunerzinc@gmail.com <vfylfhby>
This commit is contained in:
vegeta1k95
2023-02-13 08:45:05 +01:00
committed by GitHub
parent 82c39f9e99
commit 1b22d810c5
6 changed files with 1469 additions and 1 deletions

View File

@ -1359,6 +1359,8 @@ Show unit movement arrows =
# Requires translation!
Continuous rendering =
# Requires translation!
Experimental rendering improvements =
# Requires translation!
When disabled, saves battery life but certain animations will be suspended =
# Requires translation!
Order trade offers by amount =

View File

@ -732,6 +732,7 @@ Enable display cutout (requires restart) =
Show tile yields =
Show unit movement arrows =
Continuous rendering =
Experimental rendering improvements =
When disabled, saves battery life but certain animations will be suspended =
Order trade offers by amount =
Ask for confirmation when pressing next turn =

View File

@ -62,6 +62,7 @@ class GameSettings {
val showPixelUnits: Boolean get() = unitSet != null
var showPixelImprovements: Boolean = true
var continuousRendering = false
var experimentalRendering = false
var orderTradeOffersByAmount = true
var confirmNextTurn = false
var windowState = WindowState()

View File

@ -1,18 +1,37 @@
package com.unciv.ui
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.g2d.Batch
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.math.Rectangle
import com.badlogic.gdx.scenes.scene2d.Stage
import com.badlogic.gdx.utils.viewport.Viewport
import com.unciv.UncivGame
import com.unciv.logic.event.Event
import com.unciv.logic.event.EventBus
import com.unciv.ui.crashhandling.wrapCrashHandling
import com.unciv.ui.crashhandling.wrapCrashHandlingUnit
import com.unciv.ui.utils.TextureArraySpriteBatch
import com.unciv.utils.Log
/** Main stage for the game. Catches all exceptions or errors thrown by event handlers, calling [com.unciv.UncivGame.handleUncaughtThrowable] with the thrown exception or error. */
class UncivStage(viewport: Viewport) : Stage(viewport) {
class UncivStage(viewport: Viewport) : Stage(viewport, getBatch()) {
companion object {
fun getBatch(size: Int=1000): Batch {
// If for some reason it fails, we resort to usual SpriteBatch
return if (UncivGame.Current.settings.experimentalRendering) {
try {
TextureArraySpriteBatch(size)
} catch (e: Exception) {
SpriteBatch(size)
}
} else {
SpriteBatch(size)
}
}
}
/**
* Enables/disables sending pointer enter/exit events to actors on this stage.

View File

@ -69,6 +69,11 @@ fun displayTab(
continuousRenderingLabel.wrap = true
add(continuousRenderingLabel).colspan(2).padTop(10f).row()
optionsPopup.addCheckbox(this, "Experimental rendering improvements", settings.experimentalRendering) {
settings.experimentalRendering = it
onChange()
}
}
private fun addMinimapSizeSlider(table: Table, settings: GameSettings, selectBoxMinWidth: Float) {

File diff suppressed because it is too large Load Diff