From c80580274eb636ed1a3c4600ec320a6d0b5d8443 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Wed, 5 Oct 2022 16:53:03 +0200 Subject: [PATCH] mesh: replace Float.fromButs calls with generalized call --- .../gui/rendering/gui/mesh/GUIMesh.kt | 5 +- .../rendering/models/baked/block/BakedFace.kt | 5 +- .../gui/rendering/particle/ParticleMesh.kt | 5 +- .../gui/rendering/skeletal/SkeletalMesh.kt | 7 +-- .../skeletal/baked/BakedSkeletalModel.kt | 7 +-- .../gui/rendering/system/base/MeshUtil.kt | 18 +++++++ .../rendering/util/mesh/GenericColorMesh.kt | 3 +- .../gui/rendering/util/mesh/LineMesh.kt | 3 +- .../rendering/util/mesh/SimpleTextureMesh.kt | 5 +- .../rendering/world/border/WorldBorderMesh.kt | 49 ++++++++++--------- .../rendering/world/mesh/SingleWorldMesh.kt | 5 +- 11 files changed, 70 insertions(+), 42 deletions(-) create mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/system/base/MeshUtil.kt diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/mesh/GUIMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/mesh/GUIMesh.kt index 5f035be6d..05e1e50c0 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/mesh/GUIMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/mesh/GUIMesh.kt @@ -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()) } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/baked/block/BakedFace.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/baked/block/BakedFace.kt index f4979c03f..6a61693ec 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/baked/block/BakedFace.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/baked/block/BakedFace.kt @@ -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) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleMesh.kt index 5feaa999a..9d25b0638 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/particle/ParticleMesh.kt @@ -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()) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/SkeletalMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/SkeletalMesh.kt index 4e8c267dc..3ab995702 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/SkeletalMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/SkeletalMesh.kt @@ -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") diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/baked/BakedSkeletalModel.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/baked/BakedSkeletalModel.kt index e41a62fac..7ab8c6cc2 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/baked/BakedSkeletalModel.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/baked/BakedSkeletalModel.kt @@ -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]) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/MeshUtil.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/MeshUtil.kt new file mode 100644 index 000000000..5a16aa771 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/MeshUtil.kt @@ -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 . + * + * 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) +} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/GenericColorMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/GenericColorMesh.kt index 7380e7bc6..1e72359a7 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/GenericColorMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/GenericColorMesh.kt @@ -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) { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/LineMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/LineMesh.kt index f2e6233aa..123d2b229 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/LineMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/LineMesh.kt @@ -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) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/SimpleTextureMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/SimpleTextureMesh.kt index 13c1c86c2..1310b3b9b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/SimpleTextureMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/SimpleTextureMesh.kt @@ -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()) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/border/WorldBorderMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/border/WorldBorderMesh.kt index c030645e9..b8a4b038f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/border/WorldBorderMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/border/WorldBorderMesh.kt @@ -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(), )) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/SingleWorldMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/SingleWorldMesh.kt index 34d06ea97..8ebda34f5 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/SingleWorldMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/mesh/SingleWorldMesh.kt @@ -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) {