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
|
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 {
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user