fix some more bugs

This commit is contained in:
Bixilon 2021-11-15 15:53:46 +01:00
parent d2c40a810d
commit 2ecf73b82e
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
5 changed files with 31 additions and 29 deletions

View File

@ -26,10 +26,8 @@ import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions
import de.bixilon.minosoft.gui.rendering.system.base.DepthFunctions
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem
import de.bixilon.minosoft.gui.rendering.system.base.RenderingCapabilities
import de.bixilon.minosoft.gui.rendering.system.base.buffer.vertex.PrimitiveTypes
import de.bixilon.minosoft.gui.rendering.system.base.phases.CustomDrawable
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.SimpleTextureMesh
import de.bixilon.minosoft.modding.event.events.TimeChangeEvent
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
@ -49,7 +47,7 @@ class SkyRenderer(
private val skyboxShader = renderSystem.createShader(ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "sky/skybox"))
private val skySunShader = renderSystem.createShader(ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "sky/sun"))
private val skyboxMesh = SkyboxMesh(renderWindow)
private var skySunMesh = SimpleTextureMesh(renderWindow, PrimitiveTypes.TRIANGLE)
private var skySunMesh = SimpleTextureMesh(renderWindow)
private lateinit var sunTexture: AbstractTexture
private var sunMatrixUpToDate: Boolean = true
var baseColor = RenderConstants.DEFAULT_SKY_COLOR
@ -98,8 +96,8 @@ class SkyRenderer(
setSunMatrix(renderWindow.inputHandler.camera.projectionMatrix * renderWindow.inputHandler.camera.viewMatrix.toMat3().toMat4())
skySunMesh.unload()
skySunMesh = SimpleTextureMesh(renderWindow, PrimitiveTypes.TRIANGLE)
Mesh.addQuad(
skySunMesh = SimpleTextureMesh(renderWindow)
skySunMesh.addQuad(
start = Vec3(-0.15f, 1.0f, -0.15f),
end = Vec3(+0.15f, 1.0f, +0.15f),
vertexConsumer = { position, uv ->

View File

@ -2,14 +2,16 @@ package de.bixilon.minosoft.gui.rendering.system.base.phases
import de.bixilon.minosoft.gui.rendering.Renderer
import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions
import de.bixilon.minosoft.gui.rendering.system.base.RenderingCapabilities
interface TranslucentDrawable : Renderer {
val skipTranslucent: Boolean
get() = false
fun setupTranslucent() {
renderSystem.reset(depthMask = false, blending = true) // ToDo: This is just a translucent workaround
renderSystem.setBlendFunc(BlendingFunctions.SOURCE_ALPHA, BlendingFunctions.ONE_MINUS_SOURCE_ALPHA, BlendingFunctions.ONE, BlendingFunctions.ONE_MINUS_SOURCE_ALPHA)
renderSystem.reset(blending = true) // ToDo: This is just a translucent workaround
renderSystem.enable(RenderingCapabilities.BLENDING)
renderSystem.setBlendFunc(BlendingFunctions.SOURCE_ALPHA, BlendingFunctions.ONE_MINUS_SOURCE_ALPHA, BlendingFunctions.ONE, BlendingFunctions.ZERO)
}
fun drawTranslucent()

View File

@ -14,7 +14,7 @@ import org.lwjgl.opengl.GL20.glEnableVertexAttribArray
import org.lwjgl.opengl.GL20.glVertexAttribPointer
import java.nio.FloatBuffer
class FloatOpenGLVertexBuffer(override val structure: MeshStruct, data: FloatBuffer, override val primitiveType: PrimitiveTypes = PrimitiveTypes.TRIANGLE) : FloatOpenGLBuffer(data), FloatVertexBuffer {
class FloatOpenGLVertexBuffer(override val structure: MeshStruct, data: FloatBuffer, override val primitiveType: PrimitiveTypes) : FloatOpenGLBuffer(data), FloatVertexBuffer {
override var vertices = -1
private set
private var vao = -1

View File

@ -63,6 +63,26 @@ abstract class Mesh(
}
}
fun addQuad(start: Vec3, end: Vec3, uvStart: Vec2 = Vec2(0.0f, 0.0f), uvEnd: Vec2 = Vec2(1.0f, 1.0f), vertexConsumer: (position: Vec3, uv: Vec2) -> Unit) {
val positions = arrayOf(
start,
Vec3(start.x, start.y, end.z),
end,
Vec3(end.x, end.y, start.z),
)
val texturePositions = arrayOf(
Vec2(uvEnd.x, uvStart.y),
uvStart,
Vec2(uvStart.x, uvEnd.y),
uvEnd,
)
for ((vertexIndex, textureIndex) in order) {
vertexConsumer.invoke(positions[vertexIndex], texturePositions[textureIndex])
}
}
enum class MeshStates {
PREPARING,
LOADED,
@ -84,25 +104,5 @@ abstract class Mesh(
2 to 3,
1 to 0,
)
fun addQuad(start: Vec3, end: Vec3, uvStart: Vec2 = Vec2(0.0f, 0.0f), uvEnd: Vec2 = Vec2(1.0f, 1.0f), vertexConsumer: (position: Vec3, uv: Vec2) -> Unit) {
val positions = arrayOf(
start,
Vec3(start.x, start.y, end.z),
end,
Vec3(end.x, end.y, start.z),
)
val texturePositions = arrayOf(
Vec2(uvEnd.x, uvStart.y),
uvStart,
Vec2(uvStart.x, uvEnd.y),
uvEnd,
)
for ((vertexIndex, textureIndex) in TRIANGLE_TO_QUAD_ORDER) {
vertexConsumer.invoke(positions[vertexIndex], texturePositions[textureIndex])
}
}
}
}

View File

@ -21,7 +21,7 @@ import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.AbstractTex
import glm_.vec2.Vec2
import glm_.vec3.Vec3
open class SimpleTextureMesh(renderWindow: RenderWindow, primitiveType: PrimitiveTypes) : Mesh(renderWindow, SimpleTextureMeshStruct, primitiveType, initialCacheSize = 2 * 3 * SimpleTextureMeshStruct.FLOATS_PER_VERTEX) {
open class SimpleTextureMesh(renderWindow: RenderWindow, primitiveType: PrimitiveTypes = renderWindow.renderSystem.preferredPrimitiveType) : Mesh(renderWindow, SimpleTextureMeshStruct, primitiveType, initialCacheSize = 2 * 3 * SimpleTextureMeshStruct.FLOATS_PER_VERTEX) {
fun addVertex(position: Vec3, texture: AbstractTexture, uv: Vec2, tintColor: RGBColor) {
data.addAll(
@ -32,6 +32,7 @@ open class SimpleTextureMesh(renderWindow: RenderWindow, primitiveType: Primitiv
uv.x,
uv.y,
Float.fromBits(texture.renderData?.shaderTextureId ?: RenderConstants.DEBUG_TEXTURE_ID),
Float.fromBits(tintColor.rgba)
))
}
@ -40,6 +41,7 @@ open class SimpleTextureMesh(renderWindow: RenderWindow, primitiveType: Primitiv
val position: Vec3,
val uv: Vec2,
val indexLayerAnimation: Int,
val tint: RGBColor,
) {
companion object : MeshStruct(SimpleTextureMeshStruct::class)
}