From 5713f2dcaf3dca67a74db4161444cbd53b19bb72 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 6 Feb 2023 11:06:53 +0100 Subject: [PATCH] world renderer: work on meshing queue every frame This should fix chunks only being prepared when changing the frustum and "wrongly" failing tests --- .../de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt | 3 +++ .../world/queue/meshing/tasks/MeshPrepareTaskManager.kt | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt index 0a3464c5c..6201debef 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/WorldRenderer.kt @@ -203,6 +203,9 @@ class WorldRenderer( lock.unlock() } + override fun prePrepareDraw() { + meshingQueue.work() + } override fun postPrepareDraw() { if (clearVisibleNextFrame) { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/queue/meshing/tasks/MeshPrepareTaskManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/queue/meshing/tasks/MeshPrepareTaskManager.kt index 1a8b3aa08..995522c4c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/queue/meshing/tasks/MeshPrepareTaskManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/queue/meshing/tasks/MeshPrepareTaskManager.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -21,7 +21,7 @@ import de.bixilon.minosoft.gui.rendering.world.WorldRenderer class MeshPrepareTaskManager( private val renderer: WorldRenderer, - val max: Int = maxOf(DefaultThreadPool.threadCount - 2, 1), + val max: Int = minOf(maxOf(Runtime.getRuntime().availableProcessors() - 1, 1), DefaultThreadPool.threadCount - 1), ) { private val tasks: MutableSet = mutableSetOf() // current running section preparing tasks private val lock = SimpleLock()