From ff848c7c3a278fd3086636fecf5566dca2bfa156 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 16 Dec 2021 12:55:21 +0900 Subject: [PATCH] minimap is working but update is slow --- assets/mods/LoadOrder.csv | 2 +- assets/mods/dwarventech/ModuleComputers.jar | Bin 456050 -> 456303 bytes src/net/torvald/terrarum/App.java | 4 +- .../terrarum/blockstats/MinimapComposer.kt | 86 ++++++++++++------ .../terrarum/concurrent/ThreadExecutor.kt | 11 ++- .../terrarum/modulebasegame/TerrarumIngame.kt | 3 + .../modulebasegame/ui/UIInventoryMinimap.kt | 27 +++--- .../modulebasegame/worldgenerator/Biomegen.kt | 11 ++- .../modulebasegame/worldgenerator/Terragen.kt | 11 ++- .../torvald/terrarum/tests/NoiseGenerator.kt | 16 ++-- .../terrarum/tests/WorldgenNoiseSandbox.kt | 10 +- 11 files changed, 114 insertions(+), 67 deletions(-) diff --git a/assets/mods/LoadOrder.csv b/assets/mods/LoadOrder.csv index 2fd792740..1d47f6ac0 100644 --- a/assets/mods/LoadOrder.csv +++ b/assets/mods/LoadOrder.csv @@ -3,4 +3,4 @@ # You can disable basegame, but we don't recommend. basegame -dwarventech +#dwarventech diff --git a/assets/mods/dwarventech/ModuleComputers.jar b/assets/mods/dwarventech/ModuleComputers.jar index 142f94021df0758c6ed60aac4d20d0fd7206312c..02a0ee35f8ba6788e17f29cea1a543af6f6c4dc2 100644 GIT binary patch delta 45564 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 delta 44905 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 diff --git a/src/net/torvald/terrarum/App.java b/src/net/torvald/terrarum/App.java index 1f840e067..6a33f5ff5 100644 --- a/src/net/torvald/terrarum/App.java +++ b/src/net/torvald/terrarum/App.java @@ -134,7 +134,7 @@ public class App implements ApplicationListener { public static String renderer = "(a super-fancy virtual photoradiator)"; public static String rendererVendor = "(aperture science psychovisualcomputation laboratory)"; - public static int THREAD_COUNT = ThreadExecutor.INSTANCE.getThreadCount(); + public static int THREAD_COUNT = Runtime.getRuntime().availableProcessors(); public static boolean MULTITHREAD; public static final boolean is32BitJVM = !System.getProperty("sun.arch.data.model").contains("64"); @@ -774,8 +774,6 @@ public class App implements ApplicationListener { //MinimapComposer.INSTANCE.dispose(); //FloatDrawer.INSTANCE.dispose(); - ThreadExecutor.INSTANCE.killAll(); - for (Texture texture : ditherPatterns) { texture.dispose(); } diff --git a/src/net/torvald/terrarum/blockstats/MinimapComposer.kt b/src/net/torvald/terrarum/blockstats/MinimapComposer.kt index d2517808d..036d2c174 100644 --- a/src/net/torvald/terrarum/blockstats/MinimapComposer.kt +++ b/src/net/torvald/terrarum/blockstats/MinimapComposer.kt @@ -1,5 +1,6 @@ package net.torvald.terrarum.blockstats +import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Pixmap import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.glutils.FrameBuffer @@ -8,12 +9,17 @@ import com.badlogic.gdx.utils.GdxRuntimeException import com.badlogic.gdx.utils.Queue import net.torvald.terrarum.App import net.torvald.terrarum.App.printdbg +import net.torvald.terrarum.concurrent.ThreadExecutor import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.modulebasegame.ui.UIInventoryMinimap.Companion.MINIMAP_HEIGHT import net.torvald.terrarum.modulebasegame.ui.UIInventoryMinimap.Companion.MINIMAP_WIDTH +import net.torvald.terrarum.toInt +import java.util.concurrent.atomic.AtomicInteger object MinimapComposer : Disposable { + private val threadExecutor = ThreadExecutor(maxOf(1, App.THREAD_COUNT.times(2).div(3))) + val MINIMAP_TILE_WIDTH = MINIMAP_WIDTH.toInt() + 16 val MINIMAP_TILE_HEIGHT = MINIMAP_HEIGHT.toInt() + 16 @@ -38,10 +44,9 @@ object MinimapComposer : Disposable { val pixmaps = Array(9) { Pixmap(MINIMAP_TILE_WIDTH, MINIMAP_TILE_HEIGHT, Pixmap.Format.RGBA8888) } - private val updaterQueue = Queue(pixmaps.size) - private var currentThreads = Array(maxOf(1, App.THREAD_COUNT.times(2).div(3))) { - Thread() - } + private val updaterQueue = Array(pixmaps.size) { null } + private var currentThreads = Array(9) { Thread() } + init { @@ -55,41 +60,64 @@ object MinimapComposer : Disposable { */ fun queueRender(x: Int, y: Int) { - val tlx = x - (MINIMAP_TILE_WIDTH / 2) - val tly = y - (MINIMAP_TILE_HEIGHT / 2) + val udc = updaterQueue.sumOf { (it != null).toInt() } + + if (udc == 0) { + val tlx = x - (MINIMAP_TILE_WIDTH / 2) + val tly = y - (MINIMAP_TILE_HEIGHT / 2) // printdbg(this, "queue render - c($x,$y), tl($tlx,$tlx)") - // make the queueing work - // enqueue first - pixmaps.forEachIndexed { i, pixmap -> - val tx = tlx + (MINIMAP_TILE_WIDTH * ((i % 3) - 1)) - val ty = tly + (MINIMAP_TILE_HEIGHT * ((i / 3) - 1)) + // make the queueing work + // enqueue first + pixmaps.forEachIndexed { i, pixmap -> + val tx = tlx + (MINIMAP_TILE_WIDTH * ((i % 3) - 1)) + val ty = tly + (MINIMAP_TILE_HEIGHT * ((i / 3) - 1)) - updaterQueue.addLast(createUpdater(tx, ty, pixmap)) - printdbg(this, "Queueing tilemap update ($tx,$ty); queue size now: ${updaterQueue.size}") - } - - // consume the queue - for (k in currentThreads.indices) { - if (currentThreads[k].state == Thread.State.TERMINATED && !updaterQueue.isEmpty) { - currentThreads[k] = Thread(updaterQueue.removeFirst(), "MinimapLivetilePainter") - printdbg(this, "Consuming from queue; queue size now: ${updaterQueue.size}") + updaterQueue[i] = createUpdater(tx, ty, pixmap, i) + printdbg(this, "Queueing tilemap update ($tx,$ty) from queue[$i]") } - if (currentThreads[k].state == Thread.State.NEW) { - currentThreads[k].start() + + // consume the queue + /*for (k in currentThreads.indices) { + if (currentThreads[k].state == Thread.State.TERMINATED && !updaterQueue.isEmpty) { + currentThreads[k] = Thread(updaterQueue.removeFirst(), "MinimapLivetilePainter") + printdbg(this, "Consuming from queue; queue size now: ${updaterQueue.size}") + } + if (currentThreads[k].state == Thread.State.NEW) { + currentThreads[k].start() + } + }*/ + + updaterQueue.forEachIndexed { k, runnable -> + if (runnable != null) { + currentThreads[k] = Thread(runnable, "MinimapLivetilePainter") + printdbg(this, "Consuming from queue[$k]") + currentThreads[k].start() + } } } + else { + printdbg(this, "$udc Threads still running, request disregarded") + } + + printdbg(this, "** $udc Threads still running **") } private val HQRNG = net.torvald.random.HQRNG() + private val testcols = arrayOf( + Color.CORAL, Color.LIME, Color.CYAN, + Color.YELLOW, Color.SKY, Color.GOLD, + Color.BROWN, Color.DARK_GRAY, Color.RED + ).map { Color(it.lerp(Color.WHITE, 0.5f)) } + /** - * @param tx top-left - * @param ty top-left + * @param tx top-left of the world + * @param ty top-left of the world * @param pixmap pixmap to draw pixels on */ - private fun createUpdater(tx: Int, ty: Int, pixmap: Pixmap) = Runnable { + private fun createUpdater(tx: Int, ty: Int, pixmap: Pixmap, index: Int) = Runnable { for (y in ty until ty + MINIMAP_TILE_HEIGHT) { for (x in tx until tx + MINIMAP_TILE_WIDTH) { val tileTerr = world.getTileFromTerrain(x, y) @@ -100,11 +128,13 @@ object MinimapComposer : Disposable { val outCol = if (colTerr.a > 0.1f) colTerr else colWall pixmap.blending = Pixmap.Blending.None - pixmap.setColor(outCol) - //pixmap.setColor(Color.CORAL) - pixmap.drawPixel(x, y) +// pixmap.setColor(outCol) + pixmap.setColor(outCol.mul(testcols[index])) + pixmap.drawPixel(x - tx, y - ty) } } + + updaterQueue[index] = null } override fun dispose() { diff --git a/src/net/torvald/terrarum/concurrent/ThreadExecutor.kt b/src/net/torvald/terrarum/concurrent/ThreadExecutor.kt index 92b470e4e..8b2d1da76 100644 --- a/src/net/torvald/terrarum/concurrent/ThreadExecutor.kt +++ b/src/net/torvald/terrarum/concurrent/ThreadExecutor.kt @@ -1,5 +1,7 @@ package net.torvald.terrarum.concurrent +import com.badlogic.gdx.utils.Disposable +import net.torvald.terrarum.App import java.util.concurrent.* import kotlin.math.absoluteValue import kotlin.math.roundToInt @@ -9,8 +11,9 @@ typealias RunnableFun = () -> Unit typealias ThreadableFun = (Int) -> Unit -object ThreadExecutor { - val threadCount = Runtime.getRuntime().availableProcessors() // not using (logicalCores + 1) method; it's often better idea to reserve one extra thread for other jobs in the app +class ThreadExecutor( + val threadCount: Int = Runtime.getRuntime().availableProcessors() // not using (logicalCores + 1) method; it's often better idea to reserve one extra thread for other jobs in the app +) { private lateinit var executor: ExecutorService// = Executors.newFixedThreadPool(threadCount) val futures = ArrayList>() private var isOpen = true @@ -18,6 +21,10 @@ object ThreadExecutor { var allFinished = true private set + init { + App.disposables.add(Disposable { this.killAll() }) + } + private fun checkShutdown() { try { if (executor.isTerminated) diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index 6f73e778f..f236987fb 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -14,6 +14,7 @@ import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED import net.torvald.terrarum.blockproperties.BlockPropUtil import net.torvald.terrarum.blockstats.BlockStats import net.torvald.terrarum.blockstats.MinimapComposer +import net.torvald.terrarum.concurrent.ThreadExecutor import net.torvald.terrarum.console.AVTracker import net.torvald.terrarum.console.ActorsList import net.torvald.terrarum.console.Authenticator @@ -146,6 +147,8 @@ open class TerrarumIngame(batch: SpriteBatch) : IngameInstance(batch) { val SIZE_LARGE = Point2i(13500, 2970) val SIZE_HUGE = Point2i(22500, 4500) val WORLDSIZE = arrayOf(SIZE_SMALL, SIZE_NORMAL, SIZE_LARGE, SIZE_HUGE) + + val worldgenThreadExecutor = ThreadExecutor() } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryMinimap.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryMinimap.kt index 7f7b46c5a..016017108 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryMinimap.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIInventoryMinimap.kt @@ -45,7 +45,7 @@ class UIInventoryMinimap(val full: UIInventoryFull) : UICanvas() { private val minimapCamera = OrthographicCamera(MINIMAP_WIDTH, MINIMAP_HEIGHT) private var minimapRerenderTimer = 0f - private val minimapRerenderInterval = 5f // seconds + private val minimapRerenderInterval = 0.5f // seconds private var dragStatus = 0 @@ -69,16 +69,14 @@ class UIInventoryMinimap(val full: UIInventoryFull) : UICanvas() { val mdx = Terrarum.mouseDeltaX * 2f / minimapZoom val mdy = Terrarum.mouseDeltaY * 2f / minimapZoom - minimapPanX += mdx - minimapPanY += mdy + minimapPanX -= mdx + minimapPanY -= mdy minimapTranslateX += mdx minimapTranslateY += mdy dragStatus = 1 } - else if (dragStatus == 1 && !Terrarum.mouseDown) { - dragStatus = 2 - } + if (Gdx.input.isKeyPressed(Input.Keys.NUM_1)) { @@ -109,7 +107,7 @@ class UIInventoryMinimap(val full: UIInventoryFull) : UICanvas() { // render minimap batch.end() - if (dragStatus == 2 || minimapRerenderTimer >= minimapRerenderInterval) { + if (!Terrarum.mouseDown && (dragStatus == 1 || minimapRerenderTimer >= minimapRerenderInterval)) { dragStatus = 0 minimapRerenderTimer = 0f @@ -121,6 +119,8 @@ class UIInventoryMinimap(val full: UIInventoryFull) : UICanvas() { minimapFBO.inActionF(minimapCamera, batch) { + gdxClearAndSetBlend(MINIMAP_SKYCOL) + batch.inUse { // [ 1 0 0 ] [ s 0 0 ] [ s 0 0 ] @@ -130,17 +130,16 @@ class UIInventoryMinimap(val full: UIInventoryFull) : UICanvas() { // https://www.wolframalpha.com/input/?i=%7B%7B1,0,0%7D,%7B0,1,0%7D,%7Bp_x,p_y,1%7D%7D+*+%7B%7Bs,0,0%7D,%7B0,s,0%7D,%7Bw%2F2,h%2F2,1%7D%7D // sky background - batch.color = MINIMAP_SKYCOL - Toolkit.fillArea(batch, 0f, 0f, MINIMAP_WIDTH, MINIMAP_HEIGHT) + batch.color = Color.WHITE MinimapComposer.pixmaps.forEachIndexed { index, pixmap -> - renderTextures[index].dispose() - renderTextures[index] = Texture(pixmap) + renderTextures[MinimapComposer.pixmaps.lastIndex - index].dispose() + renderTextures[MinimapComposer.pixmaps.lastIndex - index] = Texture(pixmap) val ix = index % 3; val iy = index / 3 - val ox = (ix - 1) * MINIMAP_TILE_WIDTH - val oy = (iy - 1) * MINIMAP_TILE_HEIGHT + val ox = (ix - 0.5f) * MINIMAP_TILE_WIDTH + val oy = (iy - 0.5f) * MINIMAP_TILE_HEIGHT val tx = (minimapTranslateX - ox) * minimapZoom + 0.5f * MINIMAP_WIDTH val ty = (minimapTranslateY - oy) * minimapZoom + 0.5f * MINIMAP_HEIGHT @@ -156,7 +155,7 @@ class UIInventoryMinimap(val full: UIInventoryFull) : UICanvas() { val minimapDrawY = (height - cellOffY - App.scr.tvSafeGraphicsHeight - MINIMAP_HEIGHT - 72) / 2 + cellOffY * 1f if (debugvals) { - App.fontSmallNumbers.draw(batch, "$minimapPanX, $minimapPanY; x$minimapZoom", minimapDrawX, minimapDrawY - 16f) + App.fontSmallNumbers.draw(batch, "$minimapPanX, $minimapPanY; $minimapTranslateX, $minimapTranslateY; x$minimapZoom", minimapDrawX, minimapDrawY - 16f) } batch.color = Color.WHITE diff --git a/src/net/torvald/terrarum/modulebasegame/worldgenerator/Biomegen.kt b/src/net/torvald/terrarum/modulebasegame/worldgenerator/Biomegen.kt index ac97d6ff7..a0d402f9a 100644 --- a/src/net/torvald/terrarum/modulebasegame/worldgenerator/Biomegen.kt +++ b/src/net/torvald/terrarum/modulebasegame/worldgenerator/Biomegen.kt @@ -11,6 +11,7 @@ import net.torvald.terrarum.concurrent.ThreadExecutor import net.torvald.terrarum.concurrent.sliceEvenly import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarum.gameworld.fmod +import net.torvald.terrarum.modulebasegame.TerrarumIngame import kotlin.math.cos import kotlin.math.sin @@ -19,15 +20,17 @@ import kotlin.math.sin */ class Biomegen(world: GameWorld, seed: Long, params: Any) : Gen(world, seed, params) { - private val genSlices = maxOf(ThreadExecutor.threadCount, world.width / 8) + private val threadExecutor = TerrarumIngame.worldgenThreadExecutor + + private val genSlices = maxOf(threadExecutor.threadCount, world.width / 8) private val YHEIGHT_MAGIC = 2800.0 / 3.0 private val YHEIGHT_DIVISOR = 2.0 / 7.0 override fun getDone() { - ThreadExecutor.renew() + threadExecutor.renew() (0 until world.width).sliceEvenly(genSlices).map { xs -> - ThreadExecutor.submit { + threadExecutor.submit { val localJoise = getGenerator(seed, params as BiomegenParams) for (x in xs) { for (y in 0 until world.height) { @@ -45,7 +48,7 @@ class Biomegen(world: GameWorld, seed: Long, params: Any) : Gen(world, seed, par } } - ThreadExecutor.join() + threadExecutor.join() App.printdbg(this, "Waking up Worldgen") } diff --git a/src/net/torvald/terrarum/modulebasegame/worldgenerator/Terragen.kt b/src/net/torvald/terrarum/modulebasegame/worldgenerator/Terragen.kt index dd04da2f9..e5e2ad172 100644 --- a/src/net/torvald/terrarum/modulebasegame/worldgenerator/Terragen.kt +++ b/src/net/torvald/terrarum/modulebasegame/worldgenerator/Terragen.kt @@ -8,6 +8,7 @@ import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.concurrent.ThreadExecutor import net.torvald.terrarum.concurrent.sliceEvenly import net.torvald.terrarum.gameworld.GameWorld +import net.torvald.terrarum.modulebasegame.TerrarumIngame import kotlin.math.cos import kotlin.math.sin @@ -16,7 +17,9 @@ import kotlin.math.sin */ class Terragen(world: GameWorld, seed: Long, params: Any) : Gen(world, seed, params) { - private val genSlices = maxOf(ThreadExecutor.threadCount, world.width / 8) + private val threadExecutor = TerrarumIngame.worldgenThreadExecutor + + private val genSlices = maxOf(threadExecutor.threadCount, world.width / 8) private val YHEIGHT_MAGIC = 2800.0 / 3.0 private val YHEIGHT_DIVISOR = 2.0 / 7.0 @@ -25,9 +28,9 @@ class Terragen(world: GameWorld, seed: Long, params: Any) : Gen(world, seed, par private val stoneSlateDitherSize = 4 override fun getDone() { - ThreadExecutor.renew() + threadExecutor.renew() (0 until world.width).sliceEvenly(genSlices).mapIndexed { i, xs -> - ThreadExecutor.submit { + threadExecutor.submit { val localJoise = getGenerator(seed, params as TerragenParams) for (x in xs) { val sampleTheta = (x.toDouble() / world.width) * TWO_PI @@ -37,7 +40,7 @@ class Terragen(world: GameWorld, seed: Long, params: Any) : Gen(world, seed, par } } - ThreadExecutor.join() + threadExecutor.join() printdbg(this, "Waking up Worldgen") } diff --git a/src/net/torvald/terrarum/tests/NoiseGenerator.kt b/src/net/torvald/terrarum/tests/NoiseGenerator.kt index 892df2633..92eed2bcc 100644 --- a/src/net/torvald/terrarum/tests/NoiseGenerator.kt +++ b/src/net/torvald/terrarum/tests/NoiseGenerator.kt @@ -31,6 +31,8 @@ import kotlin.math.roundToInt */ class NoiseGenerator : ScreenAdapter() { + private val threadExecutor = ThreadExecutor() + lateinit var batch: SpriteBatch lateinit var camera: OrthographicCamera lateinit var pixmap: Pixmap @@ -109,13 +111,13 @@ class NoiseGenerator : ScreenAdapter() { // regen - if (timerFired && ThreadExecutor.allFinished) { + if (timerFired && threadExecutor.allFinished) { timerFired = false totalTestsDone += 1 } - if (regenerate && ThreadExecutor.allFinished) { + if (regenerate && threadExecutor.allFinished) { //printdbg(this, "Reticulating splines...") regenerate = false @@ -126,9 +128,9 @@ class NoiseGenerator : ScreenAdapter() { val seed = RNG.nextLong() val jobs = List(jobsCount) { makeGenFun(seed, it) } - ThreadExecutor.renew() - ThreadExecutor.submitAll(jobs) - ThreadExecutor.join() + threadExecutor.renew() + threadExecutor.submitAll(jobs) + threadExecutor.join() } @@ -195,7 +197,7 @@ class NoiseGenerator : ScreenAdapter() { System.exit(0) } // time to construct a new test - if (totalTestsDone % samplingCount == 0 && ThreadExecutor.allFinished) { + if (totalTestsDone % samplingCount == 0 && threadExecutor.allFinished) { pixelsInSingleJob = (IMAGE_SIZE * IMAGE_SIZE) / testSets[totalTestsDone / samplingCount] @@ -216,7 +218,7 @@ class NoiseGenerator : ScreenAdapter() { } // auto-press SPACE - if (ThreadExecutor.allFinished) { + if (threadExecutor.allFinished) { regenerate = true constructOnce = false } diff --git a/src/net/torvald/terrarum/tests/WorldgenNoiseSandbox.kt b/src/net/torvald/terrarum/tests/WorldgenNoiseSandbox.kt index c72608629..0f7a8b8a3 100644 --- a/src/net/torvald/terrarum/tests/WorldgenNoiseSandbox.kt +++ b/src/net/torvald/terrarum/tests/WorldgenNoiseSandbox.kt @@ -38,6 +38,8 @@ const val TWO_PI = Math.PI * 2 */ class WorldgenNoiseSandbox : ApplicationAdapter() { + private val threadExecutor = ThreadExecutor() + private lateinit var batch: SpriteBatch private lateinit var camera: OrthographicCamera private lateinit var font: BitmapFont @@ -70,7 +72,7 @@ class WorldgenNoiseSandbox : ApplicationAdapter() { testTex.blending = Pixmap.Blending.None tempTex = Texture(1, 1, Pixmap.Format.RGBA8888) - genSlices = maxOf(ThreadExecutor.threadCount, testTex.width / 8) + genSlices = maxOf(threadExecutor.threadCount, testTex.width / 8) println("Init done") } @@ -234,12 +236,12 @@ class WorldgenNoiseSandbox : ApplicationAdapter() { } } - ThreadExecutor.renew() + threadExecutor.renew() runnables.forEach { - ThreadExecutor.submit(it) + threadExecutor.submit(it) } - ThreadExecutor.join() + threadExecutor.join() initialGenDone = true }