mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-06 08:38:30 +09:00
failed attempt at multithreading
This commit is contained in:
@@ -136,6 +136,11 @@ class Ingame(val batch: SpriteBatch) : Screen {
|
|||||||
private set
|
private set
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private lateinit var ingameUpdateThread: ThreadIngameUpdate
|
||||||
|
private lateinit var updateThreadWrapper: Thread
|
||||||
|
//private val ingameDrawThread: ThreadIngameDraw // draw must be on the main thread
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
// GDX code //
|
// GDX code //
|
||||||
//////////////
|
//////////////
|
||||||
@@ -313,16 +318,31 @@ class Ingame(val batch: SpriteBatch) : Screen {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ingameUpdateThread = ThreadIngameUpdate(this)
|
||||||
|
updateThreadWrapper = Thread(ingameUpdateThread, "Terrarum UpdateThread")
|
||||||
|
|
||||||
|
|
||||||
LightmapRenderer.fireRecalculateEvent()
|
LightmapRenderer.fireRecalculateEvent()
|
||||||
}// END enter
|
}// END enter
|
||||||
|
|
||||||
|
|
||||||
private var updateDeltaCounter = 0.0
|
protected var updateDeltaCounter = 0.0
|
||||||
private val updateRate = 1.0 / Terrarum.TARGET_INTERNAL_FPS
|
protected val updateRate = 1.0 / Terrarum.TARGET_INTERNAL_FPS
|
||||||
|
|
||||||
|
private var firstTimeRun = true
|
||||||
|
|
||||||
///////////////
|
///////////////
|
||||||
// prod code //
|
// prod code //
|
||||||
///////////////
|
///////////////
|
||||||
|
private class ThreadIngameUpdate(val ingame: Ingame): Runnable {
|
||||||
|
override fun run() {
|
||||||
|
while (ingame.updateDeltaCounter >= ingame.updateRate) {
|
||||||
|
ingame.updateGame(Gdx.graphics.deltaTime)
|
||||||
|
ingame.updateDeltaCounter -= ingame.updateRate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun render(delta: Float) {
|
override fun render(delta: Float) {
|
||||||
Gdx.graphics.setTitle(GAME_NAME +
|
Gdx.graphics.setTitle(GAME_NAME +
|
||||||
" — F: ${Gdx.graphics.framesPerSecond} (${Terrarum.TARGET_INTERNAL_FPS})" +
|
" — F: ${Gdx.graphics.framesPerSecond} (${Terrarum.TARGET_INTERNAL_FPS})" +
|
||||||
@@ -335,9 +355,22 @@ class Ingame(val batch: SpriteBatch) : Screen {
|
|||||||
/** UPDATE CODE GOES HERE */
|
/** UPDATE CODE GOES HERE */
|
||||||
updateDeltaCounter += delta
|
updateDeltaCounter += delta
|
||||||
|
|
||||||
while (updateDeltaCounter >= updateRate) {
|
|
||||||
updateGame(delta)
|
|
||||||
updateDeltaCounter -= updateRate
|
if (false && Terrarum.getConfigBoolean("multithread")) { // NO MULTITHREADING: camera don't like concurrent modification (jittery actor movements)
|
||||||
|
if (firstTimeRun || updateThreadWrapper.state == Thread.State.TERMINATED) {
|
||||||
|
updateThreadWrapper = Thread(ingameUpdateThread, "Terrarum UpdateThread")
|
||||||
|
updateThreadWrapper.start()
|
||||||
|
|
||||||
|
if (firstTimeRun) firstTimeRun = false
|
||||||
|
}
|
||||||
|
// else, NOP;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
while (updateDeltaCounter >= updateRate) {
|
||||||
|
updateGame(delta)
|
||||||
|
updateDeltaCounter -= updateRate
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -346,7 +379,7 @@ class Ingame(val batch: SpriteBatch) : Screen {
|
|||||||
renderGame(batch)
|
renderGame(batch)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateGame(delta: Float) {
|
protected fun updateGame(delta: Float) {
|
||||||
particlesActive = 0
|
particlesActive = 0
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -610,6 +610,9 @@ object LightmapRenderer {
|
|||||||
Math.min(this.b(), 1f),
|
Math.min(this.b(), 1f),
|
||||||
1f
|
1f
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TODO: float LUT lookup using linear interpolation
|
||||||
|
|
||||||
val RGB_HDR_LUT = floatArrayOf( // polynomial of 6.0 please refer to work_files/HDRcurveBezierLinIntp.kts
|
val RGB_HDR_LUT = floatArrayOf( // polynomial of 6.0 please refer to work_files/HDRcurveBezierLinIntp.kts
|
||||||
0.0000f,0.0000f,0.0020f,0.0060f,0.0100f,0.0139f,0.0179f,0.0219f,0.0259f,0.0299f,0.0338f,0.0378f,0.0418f,0.0458f,0.0497f,0.0537f,
|
0.0000f,0.0000f,0.0020f,0.0060f,0.0100f,0.0139f,0.0179f,0.0219f,0.0259f,0.0299f,0.0338f,0.0378f,0.0418f,0.0458f,0.0497f,0.0537f,
|
||||||
0.0577f,0.0617f,0.0656f,0.0696f,0.0736f,0.0776f,0.0816f,0.0855f,0.0895f,0.0935f,0.0975f,0.1014f,0.1054f,0.1094f,0.1134f,0.1173f,
|
0.0577f,0.0617f,0.0656f,0.0696f,0.0736f,0.0776f,0.0816f,0.0855f,0.0895f,0.0935f,0.0975f,0.1014f,0.1054f,0.1094f,0.1134f,0.1173f,
|
||||||
|
|||||||
Reference in New Issue
Block a user