mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-13 09:26:11 -04:00
chunk meshing: prioritize very close chunks
This commit is contained in:
parent
fce6bc27c9
commit
ff68fcaac0
@ -24,6 +24,7 @@ import de.bixilon.minosoft.gui.rendering.chunk.queue.QueuePosition
|
|||||||
import de.bixilon.minosoft.gui.rendering.chunk.queue.meshing.tasks.MeshPrepareTask
|
import de.bixilon.minosoft.gui.rendering.chunk.queue.meshing.tasks.MeshPrepareTask
|
||||||
import de.bixilon.minosoft.gui.rendering.chunk.queue.meshing.tasks.MeshPrepareTaskManager
|
import de.bixilon.minosoft.gui.rendering.chunk.queue.meshing.tasks.MeshPrepareTaskManager
|
||||||
import de.bixilon.minosoft.util.SystemInformation
|
import de.bixilon.minosoft.util.SystemInformation
|
||||||
|
import kotlin.math.abs
|
||||||
|
|
||||||
class ChunkMeshingQueue(
|
class ChunkMeshingQueue(
|
||||||
private val renderer: ChunkRenderer,
|
private val renderer: ChunkRenderer,
|
||||||
@ -71,8 +72,10 @@ class ChunkMeshingQueue(
|
|||||||
items += item
|
items += item
|
||||||
}
|
}
|
||||||
unlock()
|
unlock()
|
||||||
|
val camera = renderer.cameraChunkPosition
|
||||||
for (item in items) {
|
for (item in items) {
|
||||||
val runnable = HeavyPoolRunnable(if (item.chunkPosition == renderer.cameraChunkPosition) ThreadPool.HIGH else ThreadPool.LOW, interruptable = true) // ToDo: Also make neighbour chunks important
|
val distance = abs(item.chunkPosition.x - camera.x) + abs(item.chunkPosition.y - camera.y)
|
||||||
|
val runnable = HeavyPoolRunnable(if (distance < 1) ThreadPool.HIGH else ThreadPool.LOW, interruptable = true)
|
||||||
val task = MeshPrepareTask(item.chunkPosition, item.sectionHeight, runnable)
|
val task = MeshPrepareTask(item.chunkPosition, item.sectionHeight, runnable)
|
||||||
task.runnable.runnable = Runnable { renderer.mesher.tryMesh(item, task, task.runnable) }
|
task.runnable.runnable = Runnable { renderer.mesher.tryMesh(item, task, task.runnable) }
|
||||||
tasks += task
|
tasks += task
|
||||||
|
Loading…
x
Reference in New Issue
Block a user