FragmentedArrayFloatList: allow batch adding

Will be complete in kutil 1.24
This commit is contained in:
Moritz Zwerger 2023-10-10 23:34:50 +02:00
parent 0a06695d4e
commit d01ac8950c
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
2 changed files with 29 additions and 9 deletions

View File

@ -32,19 +32,18 @@ class SingleChunkMesh(context: RenderContext, initialCacheSize: Int, onDemand: B
val transformedUV = texture.renderData.transformUV(uv).array val transformedUV = texture.renderData.transformUV(uv).array
data.add(position) data.add(position)
data.add(transformedUV) data.add(transformedUV)
data.add(texture.renderData.shaderTextureId.buffer()) data.add(
data.add(((light shl 24) or tintColor).buffer()) texture.renderData.shaderTextureId.buffer(),
(((light shl 24) or tintColor).buffer())
)
} }
fun addVertex(x: Float, y: Float, z: Float, uv: FloatArray, texture: Texture, shaderTextureId: Float, lightTint: Float) { fun addVertex(x: Float, y: Float, z: Float, uv: FloatArray, texture: Texture, shaderTextureId: Float, lightTint: Float) {
data.ensureSize(WorldMeshStruct.FLOATS_PER_VERTEX) data.ensureSize(WorldMeshStruct.FLOATS_PER_VERTEX)
val transformedUV = texture.renderData.transformUV(uv) val transformedUV = texture.renderData.transformUV(uv)
data.add(x) data.add(x, y, z)
data.add(y)
data.add(z)
data.add(transformedUV) data.add(transformedUV)
data.add(shaderTextureId) data.add(shaderTextureId, lightTint)
data.add(lightTint)
} }
override fun compareTo(other: SingleChunkMesh): Int { override fun compareTo(other: SingleChunkMesh): Int {

View File

@ -51,9 +51,9 @@ class FragmentedArrayFloatList(
} }
private fun grow(size: Int): FloatBuffer { private fun grow(size: Int): FloatBuffer {
checkFinished() if (finished) throw IllegalStateException()
if (limit - this.size >= size) { if (limit - this.size >= size) {
return this.incomplete.first() return this.incomplete[0]
} }
val grow = if (nextGrowStep < size) { val grow = if (nextGrowStep < size) {
(size / nextGrowStep + 1) * nextGrowStep (size / nextGrowStep + 1) * nextGrowStep
@ -78,6 +78,27 @@ class FragmentedArrayFloatList(
invalidateOutput() invalidateOutput()
} }
fun add(value1: Float, value2: Float) {
var buffer = grow(2)
buffer.put(value1); if (tryPush(buffer)) buffer = grow(1)
buffer.put(value2)
size += 2
tryPush(buffer)
invalidateOutput()
}
fun add(value1: Float, value2: Float, value3: Float) {
var buffer = grow(3)
buffer.put(value1); if (tryPush(buffer)) buffer = grow(2)
buffer.put(value2); if (tryPush(buffer)) buffer = grow(1)
buffer.put(value3)
size += 3
tryPush(buffer)
invalidateOutput()
}
private fun tryPush(fragment: FloatBuffer): Boolean { private fun tryPush(fragment: FloatBuffer): Boolean {
if (fragment.position() != fragment.limit()) { if (fragment.position() != fragment.limit()) {
return false return false