mesh: replace Float.fromButs calls with generalized call

This commit is contained in:
Bixilon 2022-10-05 16:53:03 +02:00
parent 877778bfb8
commit c80580274e
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
11 changed files with 70 additions and 42 deletions

View File

@ -18,6 +18,7 @@ import de.bixilon.kotlinglm.vec2.Vec2
import de.bixilon.kotlinglm.vec2.Vec2t
import de.bixilon.minosoft.data.text.formatting.color.RGBColor
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
import de.bixilon.minosoft.gui.rendering.system.base.texture.ShaderIdentifiable
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct
@ -69,8 +70,8 @@ class GUIMesh(
data.add(outPosition.y)
data.add(uv.x)
data.add(uv.y)
data.add(Float.fromBits(texture.shaderId))
data.add(Float.fromBits(color))
data.add(texture.shaderId.buffer())
data.add(color.buffer())
}
}

View File

@ -18,6 +18,7 @@ import de.bixilon.kotlinglm.vec3.Vec3
import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.text.formatting.color.RGBColor
import de.bixilon.minosoft.gui.rendering.models.properties.AbstractFaceProperties
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
import de.bixilon.minosoft.gui.rendering.system.base.texture.TextureTransparencies
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTexture
import de.bixilon.minosoft.gui.rendering.textures.TextureUtil.getMesh
@ -48,8 +49,8 @@ class BakedFace(
color.b *= (tint and 0xFF) / RGBColor.COLOR_FLOAT_DIVIDER
}
val textureShaderId = Float.fromBits(texture.renderData.shaderTextureId)
val tintLight = Float.fromBits(color.rgb or (light shl 24))
val textureShaderId = texture.renderData.shaderTextureId.buffer()
val tintLight = (color.rgb or (light shl 24)).buffer()
for ((index, textureIndex) in meshToUse.order) {
val indexOffset = index * 3
meshToUse.addVertex(positions[indexOffset + 0] + position[0], positions[indexOffset + 1] + position[1], positions[indexOffset + 2] + position[2], uv[textureIndex], texture, textureShaderId, tintLight)

View File

@ -18,6 +18,7 @@ import de.bixilon.kotlinglm.vec3.Vec3
import de.bixilon.kotlinglm.vec3.Vec3d
import de.bixilon.minosoft.data.text.formatting.color.RGBColor
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
import de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex.PrimitiveTypes
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTexture
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
@ -39,9 +40,9 @@ class ParticleMesh(renderWindow: RenderWindow, data: DirectArrayFloatList) : Mes
data.add(position.z.toFloat())
data.addAll(minTransformedUV)
data.addAll(maxTransformedUV)
data.add(Float.fromBits(texture.renderData.shaderTextureId))
data.add(texture.renderData.shaderTextureId.buffer())
data.add(scale)
data.add(Float.fromBits(tintColor.rgba))
data.add(tintColor.rgba.buffer())
}

View File

@ -16,6 +16,7 @@ package de.bixilon.minosoft.gui.rendering.skeletal
import de.bixilon.kotlinglm.vec2.Vec2
import de.bixilon.kotlinglm.vec3.Vec3
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
import de.bixilon.minosoft.gui.rendering.system.base.texture.ShaderTexture
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct
@ -29,9 +30,9 @@ class SkeletalMesh(renderWindow: RenderWindow, initialCacheSize: Int) : Mesh(ren
data.add(position[2])
data.add(transformedUV.x)
data.add(transformedUV.y)
data.add(Float.fromBits(transform))
data.add(Float.fromBits(texture.shaderId))
data.add(Float.fromBits(flags))
data.add(transform.buffer())
data.add(texture.shaderId.buffer())
data.add(flags.buffer())
}
@Deprecated("Pretty rendering specific")

View File

@ -23,6 +23,7 @@ import de.bixilon.minosoft.gui.rendering.models.unbaked.element.UnbakedElement.C
import de.bixilon.minosoft.gui.rendering.skeletal.SkeletalMesh
import de.bixilon.minosoft.gui.rendering.skeletal.model.SkeletalModel
import de.bixilon.minosoft.gui.rendering.skeletal.model.outliner.SkeletalOutliner
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
import de.bixilon.minosoft.gui.rendering.system.base.texture.ShaderTexture
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.rotateAssign
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
@ -105,9 +106,9 @@ class BakedSkeletalModel(
}
val texture = textures[face.texture]!!
val transform = Float.fromBits(outlinerId)
val textureShaderId = Float.fromBits(texture.shaderId)
val floatFlags = Float.fromBits(flags)
val transform = outlinerId.buffer()
val textureShaderId = texture.shaderId.buffer()
val floatFlags = flags.buffer()
for ((index, textureIndex) in mesh.order) {
val indexPosition = positions[index].array
val transformedUV = texture.transformUV(texturePositions[textureIndex])

View File

@ -0,0 +1,18 @@
/*
* Minosoft
* Copyright (C) 2020-2022 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.gui.rendering.system.base
object MeshUtil {
inline fun Int.buffer() = Float.fromBits(this)
}

View File

@ -17,6 +17,7 @@ import de.bixilon.kotlinglm.vec3.Vec3
import de.bixilon.minosoft.data.text.formatting.color.ChatColors
import de.bixilon.minosoft.data.text.formatting.color.RGBColor
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
import de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex.PrimitiveTypes
open class GenericColorMesh(renderWindow: RenderWindow, primitiveType: PrimitiveTypes = renderWindow.renderSystem.preferredPrimitiveType) : Mesh(renderWindow, GenericColorMeshStruct, primitiveType) {
@ -25,7 +26,7 @@ open class GenericColorMesh(renderWindow: RenderWindow, primitiveType: Primitive
data.add(position.x)
data.add(position.y)
data.add(position.z)
data.add(Float.fromBits((color ?: ChatColors.WHITE).rgba))
data.add((color ?: ChatColors.WHITE).rgba.buffer())
}
fun addVertex(position: Vec3, color: Float) {

View File

@ -21,6 +21,7 @@ import de.bixilon.minosoft.data.registries.VoxelShape
import de.bixilon.minosoft.data.text.formatting.color.RGBColor
import de.bixilon.minosoft.gui.rendering.RenderConstants
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
open class LineMesh(renderWindow: RenderWindow) : GenericColorMesh(renderWindow) {
@ -46,7 +47,7 @@ open class LineMesh(renderWindow: RenderWindow) : GenericColorMesh(renderWindow)
val invertedNormal1 = normal1 * -1
val invertedNormal2 = normal2 * -1
val floatColor = Float.fromBits(color.rgba)
val floatColor = color.rgba.buffer()
drawLineQuad(start, end, normal1, normal2, directionWidth, floatColor)
drawLineQuad(start, end, invertedNormal2, normal1, directionWidth, floatColor)

View File

@ -18,6 +18,7 @@ import de.bixilon.kotlinglm.vec3.Vec3
import de.bixilon.minosoft.data.text.formatting.color.Colors
import de.bixilon.minosoft.data.text.formatting.color.RGBColor
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
import de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex.PrimitiveTypes
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTexture
@ -29,8 +30,8 @@ open class SimpleTextureMesh(renderWindow: RenderWindow, primitiveType: Primitiv
data.add(position.z)
data.add(uv.x)
data.add(uv.y)
data.add(Float.fromBits(texture.renderData.shaderTextureId))
data.add(Float.fromBits(tintColor?.rgba ?: Colors.WHITE))
data.add(texture.renderData.shaderTextureId.buffer())
data.add((tintColor?.rgba ?: Colors.WHITE).buffer())
}

View File

@ -15,6 +15,7 @@ package de.bixilon.minosoft.gui.rendering.world.border
import de.bixilon.kotlinglm.vec3.Vec3
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
import de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex.PrimitiveTypes
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct
@ -23,33 +24,33 @@ class WorldBorderMesh(renderWindow: RenderWindow) : Mesh(renderWindow, WorldBord
init {
data.addAll(floatArrayOf(
-1.0f, +1.0f, -1.0f, Float.fromBits(1),
+1.0f, -1.0f, -1.0f, Float.fromBits(0),
-1.0f, -1.0f, -1.0f, Float.fromBits(3),
+1.0f, -1.0f, -1.0f, Float.fromBits(0),
-1.0f, +1.0f, -1.0f, Float.fromBits(1),
+1.0f, +1.0f, -1.0f, Float.fromBits(2),
-1.0f, +1.0f, -1.0f, 1.buffer(),
+1.0f, -1.0f, -1.0f, 0.buffer(),
-1.0f, -1.0f, -1.0f, 3.buffer(),
+1.0f, -1.0f, -1.0f, 0.buffer(),
-1.0f, +1.0f, -1.0f, 1.buffer(),
+1.0f, +1.0f, -1.0f, 2.buffer(),
-1.0f, -1.0f, +1.0f, Float.fromBits(3),
-1.0f, +1.0f, -1.0f, Float.fromBits(2),
-1.0f, -1.0f, -1.0f, Float.fromBits(0),
-1.0f, +1.0f, -1.0f, Float.fromBits(2),
-1.0f, -1.0f, +1.0f, Float.fromBits(3),
-1.0f, +1.0f, +1.0f, Float.fromBits(1),
-1.0f, -1.0f, +1.0f, 3.buffer(),
-1.0f, +1.0f, -1.0f, 2.buffer(),
-1.0f, -1.0f, -1.0f, 0.buffer(),
-1.0f, +1.0f, -1.0f, 2.buffer(),
-1.0f, -1.0f, +1.0f, 3.buffer(),
-1.0f, +1.0f, +1.0f, 1.buffer(),
+1.0f, -1.0f, -1.0f, Float.fromBits(3),
+1.0f, +1.0f, +1.0f, Float.fromBits(2),
+1.0f, -1.0f, +1.0f, Float.fromBits(0),
+1.0f, +1.0f, +1.0f, Float.fromBits(2),
+1.0f, -1.0f, -1.0f, Float.fromBits(3),
+1.0f, +1.0f, -1.0f, Float.fromBits(1),
+1.0f, -1.0f, -1.0f, 3.buffer(),
+1.0f, +1.0f, +1.0f, 2.buffer(),
+1.0f, -1.0f, +1.0f, 0.buffer(),
+1.0f, +1.0f, +1.0f, 2.buffer(),
+1.0f, -1.0f, -1.0f, 3.buffer(),
+1.0f, +1.0f, -1.0f, 1.buffer(),
-1.0f, -1.0f, +1.0f, Float.fromBits(0),
+1.0f, +1.0f, +1.0f, Float.fromBits(1),
-1.0f, +1.0f, +1.0f, Float.fromBits(2),
+1.0f, +1.0f, +1.0f, Float.fromBits(1),
-1.0f, -1.0f, +1.0f, Float.fromBits(0),
+1.0f, -1.0f, +1.0f, Float.fromBits(3),
-1.0f, -1.0f, +1.0f, 0.buffer(),
+1.0f, +1.0f, +1.0f, 1.buffer(),
-1.0f, +1.0f, +1.0f, 2.buffer(),
+1.0f, +1.0f, +1.0f, 1.buffer(),
-1.0f, -1.0f, +1.0f, 0.buffer(),
+1.0f, -1.0f, +1.0f, 3.buffer(),
))
}

View File

@ -16,6 +16,7 @@ package de.bixilon.minosoft.gui.rendering.world.mesh
import de.bixilon.kotlinglm.vec2.Vec2
import de.bixilon.kotlinglm.vec3.Vec3
import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTexture
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct
@ -31,8 +32,8 @@ class SingleWorldMesh(renderWindow: RenderWindow, initialCacheSize: Int, onDeman
data.add(position[2])
data.add(transformedUV.x)
data.add(transformedUV.y)
data.add(Float.fromBits(texture.renderData.shaderTextureId))
data.add(Float.fromBits(tintColor or (light shl 24)))
data.add(texture.renderData.shaderTextureId.buffer())
data.add((tintColor or (light shl 24)).buffer())
}
fun addVertex(x: Float, y: Float, z: Float, uv: Vec2, texture: AbstractTexture, shaderTextureId: Float, tintLight: Float) {