failed attempt at multithreading

This commit is contained in:
minjaesong
2017-07-08 22:34:45 +09:00
parent 383a2f7259
commit 482cb5ff21
2 changed files with 42 additions and 6 deletions

View File

@@ -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

View File

@@ -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,