make current render order legacy

This commit is contained in:
Moritz Zwerger 2023-10-20 21:15:58 +02:00
parent d4a701583e
commit af561c1232
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
9 changed files with 68 additions and 43 deletions

View File

@ -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) {

View File

@ -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

View File

@ -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")

View File

@ -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<SingleChunkMesh> {
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,
))
}
}

View File

@ -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

View File

@ -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

View File

@ -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() {

View File

@ -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() {

View File

@ -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 <https://www.gnu.org/licenses/>.
*
* 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,
))
}