diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/LoadedMeshes.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/LoadedMeshes.kt index f74d77cd9..8a998a79d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/LoadedMeshes.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/LoadedMeshes.kt @@ -88,14 +88,17 @@ class LoadedMeshes( operator fun contains(position: ChunkPosition): Boolean { + renderer.lock.acquire() lock.acquire() val contains = position in this.meshes lock.release() + renderer.lock.release() return contains } fun collect(visible: VisibleMeshes) { + renderer.lock.acquire() lock.acquire() for ((chunkPosition, meshes) in this.meshes) { if (!renderer.visibilityGraph.isChunkVisible(chunkPosition)) { @@ -111,6 +114,7 @@ class LoadedMeshes( } } lock.release() + renderer.lock.release() } fun lock() { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/queue/CulledQueue.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/queue/CulledQueue.kt index d7aee9c96..22709829c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/queue/CulledQueue.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/queue/CulledQueue.kt @@ -81,6 +81,7 @@ class CulledQueue( fun collect(): MutableList> { + renderer.lock.acquire() lock.acquire() // The queue method needs the full lock of the culledQueue val world = renderer.world @@ -112,6 +113,7 @@ class CulledQueue( world.chunks.lock.release() lock.release() + renderer.lock.release() return list diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/queue/meshing/ChunkMeshingQueue.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/queue/meshing/ChunkMeshingQueue.kt index 2b5c24fdd..e4fd8e840 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/queue/meshing/ChunkMeshingQueue.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/queue/meshing/ChunkMeshingQueue.kt @@ -144,6 +144,7 @@ class ChunkMeshingQueue( fun queue(item: WorldQueueItem) { lock() + // TODO: don't remove and readd if (set.remove(item)) { queue -= item }