From af561c12327c48d88d323bc78e77b8cf1ecaf1ac Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Fri, 20 Oct 2023 21:15:58 +0200 Subject: [PATCH] make current render order legacy --- .../gui/mesh/DummyGUIVertexConsumer.kt | 4 +- .../rendering/models/baked/BakedFaceTest.kt | 3 +- .../system/dummy/DummyRenderSystem.kt | 5 +- .../rendering/chunk/mesh/SingleChunkMesh.kt | 21 +------- .../gui/rendering/gui/elements/Element.kt | 2 +- .../gui/rendering/system/base/RenderSystem.kt | 2 + .../system/opengl/OpenGLRenderSystem.kt | 19 ++----- .../minosoft/gui/rendering/util/mesh/Mesh.kt | 2 +- .../gui/rendering/util/mesh/MeshOrder.kt | 53 +++++++++++++++++++ 9 files changed, 68 insertions(+), 43 deletions(-) create mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/MeshOrder.kt diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/gui/mesh/DummyGUIVertexConsumer.kt b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/gui/mesh/DummyGUIVertexConsumer.kt index 10530d858..59d72a87a 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/gui/mesh/DummyGUIVertexConsumer.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/gui/mesh/DummyGUIVertexConsumer.kt @@ -18,10 +18,10 @@ import de.bixilon.minosoft.data.text.formatting.color.RGBColor import de.bixilon.minosoft.gui.rendering.system.base.RenderOrder import de.bixilon.minosoft.gui.rendering.system.base.texture.shader.ShaderTexture import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.Texture -import de.bixilon.minosoft.gui.rendering.system.opengl.OpenGLRenderSystem +import de.bixilon.minosoft.gui.rendering.util.mesh.MeshOrder open class DummyGUIVertexConsumer : GUIVertexConsumer { - override val order: RenderOrder get() = OpenGLRenderSystem.QUAD_ORDER + override val order: RenderOrder get() = MeshOrder.QUAD var char = 0 override fun addCache(cache: GUIMeshCache) { diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/baked/BakedFaceTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/baked/BakedFaceTest.kt index 6863c376b..0f1f5bb70 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/baked/BakedFaceTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/baked/BakedFaceTest.kt @@ -21,6 +21,7 @@ import de.bixilon.minosoft.gui.rendering.models.block.state.baked.Shades 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.Texture +import de.bixilon.minosoft.gui.rendering.util.mesh.MeshOrder import de.bixilon.minosoft.test.IT.OBJENESIS import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.collections.floats.FragmentedArrayFloatList @@ -39,7 +40,7 @@ class BakedFaceTest { private fun singleMesh(): SingleChunkMesh { val mesh = OBJENESIS.newInstance(SingleChunkMesh::class.java) mesh::quadType.forceSet(PrimitiveTypes.QUAD) - mesh::order.forceSet(SingleChunkMesh.QUAD_ORDER) + mesh::order.forceSet(MeshOrder.QUAD) mesh.data = FragmentedArrayFloatList(1000) // TODO: kutil 1.24 diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/system/dummy/DummyRenderSystem.kt b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/system/dummy/DummyRenderSystem.kt index 52b5d3534..1a371491b 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/system/dummy/DummyRenderSystem.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/system/dummy/DummyRenderSystem.kt @@ -33,7 +33,7 @@ import de.bixilon.minosoft.gui.rendering.system.dummy.buffer.uniform.DummyFloatU import de.bixilon.minosoft.gui.rendering.system.dummy.buffer.uniform.DummyIntUniformBuffer import de.bixilon.minosoft.gui.rendering.system.dummy.shader.DummyNativeShader import de.bixilon.minosoft.gui.rendering.system.dummy.texture.DummyTextureManager -import de.bixilon.minosoft.gui.rendering.system.opengl.OpenGLRenderSystem +import de.bixilon.minosoft.gui.rendering.util.mesh.MeshOrder import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct import java.nio.ByteBuffer import java.nio.FloatBuffer @@ -80,7 +80,8 @@ class DummyRenderSystem( override var clearColor: RGBColor = Colors.TRANSPARENT override var quadType: PrimitiveTypes = PrimitiveTypes.QUAD - override var quadOrder: RenderOrder = if (quadType == PrimitiveTypes.QUAD) OpenGLRenderSystem.QUAD_ORDER else OpenGLRenderSystem.TRIANGLE_ORDER + override var quadOrder: RenderOrder = if (quadType == PrimitiveTypes.QUAD) MeshOrder.QUAD else MeshOrder.TRIANGLE + override var legacyQuadOrder: RenderOrder = if (quadType == PrimitiveTypes.QUAD) MeshOrder.LEGACY_QUAD else MeshOrder.LEGACY_TRIANGLE override fun readPixels(start: Vec2i, end: Vec2i, type: PixelTypes): ByteBuffer { TODO("Not yet implemented") diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/mesh/SingleChunkMesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/mesh/SingleChunkMesh.kt index 02bc7af23..13a11468c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/mesh/SingleChunkMesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/mesh/SingleChunkMesh.kt @@ -17,8 +17,6 @@ import de.bixilon.kotlinglm.vec2.Vec2 import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.minosoft.gui.rendering.RenderContext import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer -import de.bixilon.minosoft.gui.rendering.system.base.RenderOrder -import de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex.PrimitiveTypes import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.Texture import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct @@ -26,7 +24,7 @@ import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct class SingleChunkMesh(context: RenderContext, initialCacheSize: Int, onDemand: Boolean = false) : Mesh(context, WorldMeshStruct, initialCacheSize = initialCacheSize, onDemand = onDemand), Comparable { var distance: Float = 0.0f // Used for sorting - override val order = if (quadType == PrimitiveTypes.QUAD) QUAD_ORDER else TRIANGLE_ORDER + override val order = context.system.quadOrder fun addVertex(position: FloatArray, uv: Vec2, texture: Texture, tintColor: Int, light: Int) { data.ensureSize(WorldMeshStruct.FLOATS_PER_VERTEX) @@ -61,21 +59,4 @@ class SingleChunkMesh(context: RenderContext, initialCacheSize: Int, onDemand: B ) { companion object : MeshStruct(WorldMeshStruct::class) } - - companion object { - val TRIANGLE_ORDER = RenderOrder(intArrayOf( - 0, 0, - 3, 3, - 2, 2, - 2, 2, - 1, 1, - 0, 0, - )) - val QUAD_ORDER = RenderOrder(intArrayOf( - 0, 0, - 3, 3, - 2, 2, - 1, 1, - )) - } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/Element.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/Element.kt index 065a0b926..4fea6cb0a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/Element.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/Element.kt @@ -65,7 +65,7 @@ abstract class Element(val guiRenderer: GUIRenderer, initialCacheSize: Int = 100 } @Deprecated("Warning: Should not be directly accessed!") - open val cache = GUIMeshCache(guiRenderer.halfSize, context.system.quadOrder, context, initialCacheSize) + open val cache = GUIMeshCache(guiRenderer.halfSize, context.system.legacyQuadOrder, context, initialCacheSize) private var previousMaxSize = Vec2.EMPTY diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/RenderSystem.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/RenderSystem.kt index 573890ebc..d85017cf4 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/RenderSystem.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/RenderSystem.kt @@ -102,7 +102,9 @@ interface RenderSystem { var clearColor: RGBColor var quadType: PrimitiveTypes + var quadOrder: RenderOrder + @Deprecated("legacy") var legacyQuadOrder: RenderOrder fun readPixels(start: Vec2i, end: Vec2i, type: PixelTypes): ByteBuffer diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLRenderSystem.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLRenderSystem.kt index 9fe8e6eed..aac382338 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLRenderSystem.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLRenderSystem.kt @@ -34,6 +34,7 @@ import de.bixilon.minosoft.gui.rendering.system.opengl.buffer.uniform.IntOpenGLU import de.bixilon.minosoft.gui.rendering.system.opengl.buffer.vertex.FloatOpenGLVertexBuffer import de.bixilon.minosoft.gui.rendering.system.opengl.texture.OpenGLTextureManager import de.bixilon.minosoft.gui.rendering.system.opengl.vendor.* +import de.bixilon.minosoft.gui.rendering.util.mesh.MeshOrder import de.bixilon.minosoft.gui.rendering.util.mesh.MeshStruct import de.bixilon.minosoft.modding.event.listener.CallbackEventListener.Companion.listen import de.bixilon.minosoft.util.logging.Log @@ -69,7 +70,8 @@ class OpenGLRenderSystem( } else { PrimitiveTypes.TRIANGLE } - override var quadOrder: RenderOrder = if (quadType == PrimitiveTypes.QUAD) QUAD_ORDER else TRIANGLE_ORDER + override var quadOrder: RenderOrder = if (quadType == PrimitiveTypes.QUAD) MeshOrder.QUAD else MeshOrder.TRIANGLE + override var legacyQuadOrder: RenderOrder = if (quadType == PrimitiveTypes.QUAD) MeshOrder.LEGACY_QUAD else MeshOrder.LEGACY_TRIANGLE var boundVao = -1 var boundBuffer = -1 var uniformBufferBindingIndex = 0 @@ -328,21 +330,6 @@ class OpenGLRenderSystem( } companion object { - val TRIANGLE_ORDER = RenderOrder(intArrayOf( - // TOOD: they are all rotated 90° wrong, fix this for triangle and quad order - 0, 1, - 3, 2, - 2, 3, - 2, 3, - 1, 0, - 0, 1, - )) - val QUAD_ORDER = RenderOrder(intArrayOf( - 0, 1, - 3, 2, - 2, 3, - 1, 0, - )) private val RenderingCapabilities.gl: Int get() { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/Mesh.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/Mesh.kt index b07d31512..6a9d90505 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/Mesh.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/Mesh.kt @@ -31,7 +31,7 @@ abstract class Mesh( data: FragmentedArrayFloatList? = null, val onDemand: Boolean = false, ) : AbstractVertexConsumer { - override val order = context.system.quadOrder + override val order = context.system.legacyQuadOrder private var _data: FragmentedArrayFloatList? = data ?: if (onDemand) null else FragmentedArrayFloatList(initialCacheSize) var data: FragmentedArrayFloatList get() { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/MeshOrder.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/MeshOrder.kt new file mode 100644 index 000000000..34f5d53b2 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mesh/MeshOrder.kt @@ -0,0 +1,53 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 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.util.mesh + +import de.bixilon.minosoft.gui.rendering.system.base.RenderOrder + +// TODO: Replace mesh order with index buffer +object MeshOrder { + @Deprecated("legacy") + val LEGACY_QUAD = RenderOrder(intArrayOf( + 0, 1, + 3, 2, + 2, 3, + 1, 0, + )) + + @Deprecated("legacy") + val LEGACY_TRIANGLE = RenderOrder(intArrayOf( + // TOOD: they are all rotated 90° wrong, fix this for triangle and quad order + 0, 1, + 3, 2, + 2, 3, + 2, 3, + 1, 0, + 0, 1, + )) + + val TRIANGLE = RenderOrder(intArrayOf( + 0, 0, + 3, 3, + 2, 2, + 2, 2, + 1, 1, + 0, 0, + )) + val QUAD = RenderOrder(intArrayOf( + 0, 0, + 3, 3, + 2, 2, + 1, 1, + )) +}