From 482cb5ff21adc9b39b9b45778e000b9f084047e8 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sat, 8 Jul 2017 22:34:45 +0900 Subject: [PATCH] failed attempt at multithreading --- src/net/torvald/terrarum/Ingame.kt | 45 ++++++++++++++++--- .../terrarum/worlddrawer/LightmapRenderer.kt | 3 ++ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/net/torvald/terrarum/Ingame.kt b/src/net/torvald/terrarum/Ingame.kt index 77e846e29..41e866d29 100644 --- a/src/net/torvald/terrarum/Ingame.kt +++ b/src/net/torvald/terrarum/Ingame.kt @@ -136,6 +136,11 @@ class Ingame(val batch: SpriteBatch) : Screen { 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 // ////////////// @@ -313,16 +318,31 @@ class Ingame(val batch: SpriteBatch) : Screen { + ingameUpdateThread = ThreadIngameUpdate(this) + updateThreadWrapper = Thread(ingameUpdateThread, "Terrarum UpdateThread") + + LightmapRenderer.fireRecalculateEvent() }// END enter - private var updateDeltaCounter = 0.0 - private val updateRate = 1.0 / Terrarum.TARGET_INTERNAL_FPS + protected var updateDeltaCounter = 0.0 + protected val updateRate = 1.0 / Terrarum.TARGET_INTERNAL_FPS + + private var firstTimeRun = true /////////////// // 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) { Gdx.graphics.setTitle(GAME_NAME + " — F: ${Gdx.graphics.framesPerSecond} (${Terrarum.TARGET_INTERNAL_FPS})" + @@ -335,9 +355,22 @@ class Ingame(val batch: SpriteBatch) : Screen { /** UPDATE CODE GOES HERE */ 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) } - private fun updateGame(delta: Float) { + protected fun updateGame(delta: Float) { particlesActive = 0 diff --git a/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt b/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt index d757a8253..59a44e1fd 100644 --- a/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt +++ b/src/net/torvald/terrarum/worlddrawer/LightmapRenderer.kt @@ -610,6 +610,9 @@ object LightmapRenderer { Math.min(this.b(), 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 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,