mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 02:45:13 -04:00
world renderer: fix some locking crashes
This commit is contained in:
parent
b8ef770685
commit
6a5e9ab799
@ -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() {
|
||||
|
@ -81,6 +81,7 @@ class CulledQueue(
|
||||
|
||||
|
||||
fun collect(): MutableList<Pair<Chunk, Int>> {
|
||||
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
|
||||
|
@ -144,6 +144,7 @@ class ChunkMeshingQueue(
|
||||
|
||||
fun queue(item: WorldQueueItem) {
|
||||
lock()
|
||||
// TODO: don't remove and readd
|
||||
if (set.remove(item)) {
|
||||
queue -= item
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user