diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/WorldGUIConsumer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/WorldGUIConsumer.kt index 0a9e9e521..1425a3cad 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/WorldGUIConsumer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/WorldGUIConsumer.kt @@ -50,9 +50,9 @@ class WorldGUIConsumer(val mesh: SingleWorldMesh, val transform: Mat4, val light } fun offset(x: Float) { - transform[3, 0] = transform[0, 0] * x + transform[3, 0] - transform[3, 1] = transform[0, 1] * x + transform[3, 1] - transform[3, 2] = transform[0, 2] * x + transform[3, 2] - transform[3, 3] = transform[0, 3] * x + transform[3, 3] + transform[3, 0] += transform[0, 0] * x + transform[3, 1] += transform[0, 1] * x + transform[3, 2] += transform[0, 2] * x + transform[3, 3] += transform[0, 3] * x } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/Mesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/Mesh.kt index e1d10a53e..119cb5bba 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/Mesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/Mesh.kt @@ -24,15 +24,21 @@ abstract class Mesh( val renderWindow: RenderWindow, private val struct: MeshStruct, private val primitiveType: PrimitiveTypes = renderWindow.renderSystem.preferredPrimitiveType, - initialCacheSize: Int = 10000, + var initialCacheSize: Int = 10000, val clearOnLoad: Boolean = true, data: DirectArrayFloatList? = null, + val onDemand: Boolean = false, ) { val order = renderWindow.renderSystem.primitiveMeshOrder val reversedOrder = order.reversedArray() - private var _data: DirectArrayFloatList? = data ?: DirectArrayFloatList(initialCacheSize) + private var _data: DirectArrayFloatList? = data ?: if (onDemand) null else DirectArrayFloatList(initialCacheSize) var data: DirectArrayFloatList - get() = _data as DirectArrayFloatList + get() { + if (onDemand && _data == null) { + _data = DirectArrayFloatList(initialCacheSize) + } + return _data as DirectArrayFloatList + } set(value) { _data = value } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/SingleWorldMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/SingleWorldMesh.kt index 2bced29bf..751b59464 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/SingleWorldMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/SingleWorldMesh.kt @@ -20,7 +20,7 @@ import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTex import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct -class SingleWorldMesh(renderWindow: RenderWindow, initialCacheSize: Int) : Mesh(renderWindow, SectionArrayMeshStruct, initialCacheSize = initialCacheSize) { +class SingleWorldMesh(renderWindow: RenderWindow, initialCacheSize: Int, onDemand: Boolean = false) : Mesh(renderWindow, SectionArrayMeshStruct, initialCacheSize = initialCacheSize, onDemand = onDemand) { var distance: Float = 0.0f // Used for sorting fun addVertex(position: FloatArray, uv: Vec2, texture: AbstractTexture, tintColor: Int, light: Int) { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/WorldMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/WorldMesh.kt index bd2c3c96a..8b2a7588a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/WorldMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/WorldMesh.kt @@ -30,7 +30,7 @@ class WorldMesh( var opaqueMesh: SingleWorldMesh? = SingleWorldMesh(renderWindow, if (smallMesh) 1000 else 100000) var translucentMesh: SingleWorldMesh? = SingleWorldMesh(renderWindow, if (smallMesh) 1000 else 10000) var transparentMesh: SingleWorldMesh? = SingleWorldMesh(renderWindow, if (smallMesh) 1000 else 20000) - var textMesh: SingleWorldMesh? = SingleWorldMesh(renderWindow, if (smallMesh) 1000 else 20000) + var textMesh: SingleWorldMesh? = SingleWorldMesh(renderWindow, if (smallMesh) 1000 else 200000, onDemand = true) var blockEntities: Set>? = null // used for frustum culling