From 0f4b7ace079eccd790530c5a8ec565b4f91925d1 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 6 Sep 2023 19:06:12 +0700 Subject: [PATCH] Add RenderConfig#initialBuilderCapacity --- .../dbotthepony/kstarbound/client/gl/vertex/VertexBuilder.kt | 2 ++ .../dbotthepony/kstarbound/client/render/MultiMeshBuilder.kt | 2 +- .../ru/dbotthepony/kstarbound/client/render/RenderConfig.kt | 1 + .../ru/dbotthepony/kstarbound/client/render/TileRenderer.kt | 3 +++ 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/vertex/VertexBuilder.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/vertex/VertexBuilder.kt index 171044c6..54085cbb 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/vertex/VertexBuilder.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/gl/vertex/VertexBuilder.kt @@ -54,6 +54,8 @@ class VertexBuilder( val defaultMode: GeometryType? = null, initialCapacity: Int = 64 ) { + constructor(attributes: GLAttributeList, initialCapacity: Int) : this(attributes, null, initialCapacity) + init { require(initialCapacity > 0) { "Invalid capacity: $initialCapacity" } } diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/MultiMeshBuilder.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/MultiMeshBuilder.kt index f4d9783b..f218e45e 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/MultiMeshBuilder.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/MultiMeshBuilder.kt @@ -16,7 +16,7 @@ class MultiMeshBuilder { fun get(config: RenderConfig<*>, layer: Int): VertexBuilder { return meshes.computeIfAbsent(config, Reference2ObjectFunction { Int2ObjectOpenHashMap() - }).computeIfAbsent(layer, Int2ObjectFunction { Entry(config, VertexBuilder(config.program.attributes), layer) }).builder + }).computeIfAbsent(layer, Int2ObjectFunction { Entry(config, VertexBuilder(config.program.attributes, config.initialBuilderCapacity), layer) }).builder } fun clear() = meshes.clear() diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/RenderConfig.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/RenderConfig.kt index 29b2d0f0..fd82f20c 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/RenderConfig.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/RenderConfig.kt @@ -5,6 +5,7 @@ import ru.dbotthepony.kvector.arrays.Matrix4f abstract class RenderConfig(val program: T) { val state get() = program.state + open val initialBuilderCapacity: Int get() = 64 open fun setup(transform: Matrix4f = state.matrixStack.last()) { program.use() diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/TileRenderer.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/TileRenderer.kt index 92e29cd2..002f99e2 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/TileRenderer.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/client/render/TileRenderer.kt @@ -44,6 +44,9 @@ class TileRenderers(val client: StarboundClient) { } private inner class Config(private val texture: GLTexture2D, private val color: RGBAColor) : RenderConfig(state.programs.tile) { + override val initialBuilderCapacity: Int + get() = 1024 + override fun setup(transform: Matrix4f) { super.setup(transform) state.activeTexture = 0