mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-13 09:26:11 -04:00
FragmentedArrayFloatList: allow batch adding
Will be complete in kutil 1.24
This commit is contained in:
parent
0a06695d4e
commit
d01ac8950c
@ -32,19 +32,18 @@ class SingleChunkMesh(context: RenderContext, initialCacheSize: Int, onDemand: B
|
||||
val transformedUV = texture.renderData.transformUV(uv).array
|
||||
data.add(position)
|
||||
data.add(transformedUV)
|
||||
data.add(texture.renderData.shaderTextureId.buffer())
|
||||
data.add(((light shl 24) or tintColor).buffer())
|
||||
data.add(
|
||||
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) {
|
||||
data.ensureSize(WorldMeshStruct.FLOATS_PER_VERTEX)
|
||||
val transformedUV = texture.renderData.transformUV(uv)
|
||||
data.add(x)
|
||||
data.add(y)
|
||||
data.add(z)
|
||||
data.add(x, y, z)
|
||||
data.add(transformedUV)
|
||||
data.add(shaderTextureId)
|
||||
data.add(lightTint)
|
||||
data.add(shaderTextureId, lightTint)
|
||||
}
|
||||
|
||||
override fun compareTo(other: SingleChunkMesh): Int {
|
||||
|
@ -51,9 +51,9 @@ class FragmentedArrayFloatList(
|
||||
}
|
||||
|
||||
private fun grow(size: Int): FloatBuffer {
|
||||
checkFinished()
|
||||
if (finished) throw IllegalStateException()
|
||||
if (limit - this.size >= size) {
|
||||
return this.incomplete.first()
|
||||
return this.incomplete[0]
|
||||
}
|
||||
val grow = if (nextGrowStep < size) {
|
||||
(size / nextGrowStep + 1) * nextGrowStep
|
||||
@ -78,6 +78,27 @@ class FragmentedArrayFloatList(
|
||||
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 {
|
||||
if (fragment.position() != fragment.limit()) {
|
||||
return false
|
||||
|
Loading…
x
Reference in New Issue
Block a user