mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-18 11:54:59 -04:00
various performance improvements
This commit is contained in:
parent
329bdc6fb8
commit
668e3d27dc
@ -36,7 +36,7 @@ class Frustum(
|
||||
) {
|
||||
private lateinit var data: FrustumData
|
||||
var revision = 0
|
||||
private set
|
||||
private set
|
||||
|
||||
fun recalculate() {
|
||||
val matrix = matrixHandler.viewProjectionMatrix.transpose()
|
||||
@ -139,8 +139,9 @@ class Frustum(
|
||||
}
|
||||
|
||||
fun containsChunk(chunkPosition: Vec2i, sectionHeight: Int, minPosition: Vec3i = CHUNK_NIN_POSITION, maxPosition: Vec3i = ProtocolDefinition.CHUNK_SECTION_SIZE): Boolean {
|
||||
val min = Vec3i.of(chunkPosition, sectionHeight, minPosition)
|
||||
val max = Vec3i.of(chunkPosition, sectionHeight, maxPosition + 1)
|
||||
val base = Vec3i.of(chunkPosition, sectionHeight)
|
||||
val min = base + minPosition
|
||||
val max = base + maxPosition + 1
|
||||
return containsRegion(Vec3(min), Vec3(max))
|
||||
}
|
||||
|
||||
|
@ -769,7 +769,7 @@ class WorldRenderer(
|
||||
this.cameraPosition = cameraPosition
|
||||
}
|
||||
|
||||
val visible = VisibleMeshes(cameraPosition)
|
||||
val visible = VisibleMeshes(cameraPosition, this.visible)
|
||||
|
||||
loadedMeshesLock.acquire()
|
||||
for ((chunkPosition, meshes) in this.loadedMeshes) {
|
||||
|
@ -14,16 +14,20 @@
|
||||
package de.bixilon.minosoft.gui.rendering.world.mesh
|
||||
|
||||
import de.bixilon.kotlinglm.vec3.Vec3
|
||||
import de.bixilon.kutil.concurrent.pool.DefaultThreadPool
|
||||
import de.bixilon.kutil.concurrent.pool.ThreadPool
|
||||
import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable
|
||||
import de.bixilon.kutil.latch.CountUpAndDownLatch
|
||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
|
||||
import de.bixilon.minosoft.gui.rendering.world.entities.BlockEntityRenderer
|
||||
import de.bixilon.minosoft.util.KUtil.format
|
||||
|
||||
class VisibleMeshes(val cameraPosition: Vec3 = Vec3.EMPTY) {
|
||||
val opaque: MutableList<SingleWorldMesh> = mutableListOf()
|
||||
val translucent: MutableList<SingleWorldMesh> = mutableListOf()
|
||||
val transparent: MutableList<SingleWorldMesh> = mutableListOf()
|
||||
val text: MutableList<SingleWorldMesh> = mutableListOf()
|
||||
val blockEntities: MutableList<BlockEntityRenderer<*>> = mutableListOf()
|
||||
class VisibleMeshes(val cameraPosition: Vec3 = Vec3.EMPTY, previous: VisibleMeshes? = null) {
|
||||
val opaque: ArrayList<SingleWorldMesh> = ArrayList(previous?.opaque?.size ?: 128)
|
||||
val translucent: ArrayList<SingleWorldMesh> = ArrayList(previous?.translucent?.size ?: 16)
|
||||
val transparent: ArrayList<SingleWorldMesh> = ArrayList(previous?.transparent?.size ?: 128)
|
||||
val text: ArrayList<SingleWorldMesh> = ArrayList(previous?.text?.size ?: 16)
|
||||
val blockEntities: ArrayList<BlockEntityRenderer<*>> = ArrayList(previous?.blockEntities?.size ?: 128)
|
||||
|
||||
val sizeString: String
|
||||
get() = "${opaque.size.format()}|${translucent.size.format()}|${transparent.size.format()}|${text.size.format()}|${blockEntities.size.format()}"
|
||||
@ -54,10 +58,12 @@ class VisibleMeshes(val cameraPosition: Vec3 = Vec3.EMPTY) {
|
||||
|
||||
|
||||
fun sort() {
|
||||
opaque.sortBy { it.distance }
|
||||
translucent.sortBy { -it.distance }
|
||||
transparent.sortBy { it.distance }
|
||||
text.sortBy { it.distance }
|
||||
val latch = CountUpAndDownLatch(4)
|
||||
DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGHER) { opaque.sortBy { it.distance };latch.dec() }
|
||||
DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGHER) { translucent.sortBy { -it.distance };latch.dec() }
|
||||
DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGHER) { transparent.sortBy { it.distance };latch.dec() }
|
||||
DefaultThreadPool += ThreadPoolRunnable(priority = ThreadPool.Priorities.HIGHER) { text.sortBy { it.distance };latch.dec() }
|
||||
latch.await()
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user