world renderer: make text mesh ondemand

This commit is contained in:
Bixilon 2022-04-22 19:25:57 +02:00
parent 5b6b6cf9a7
commit 595c4c2505
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
4 changed files with 15 additions and 9 deletions

View File

@ -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
}
}

View File

@ -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
}

View File

@ -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) {

View File

@ -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<BlockEntityRenderer<*>>? = null
// used for frustum culling