From 0a8c1f974eeeb23a5486bb29c0bba7b868a66be9 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sat, 26 Feb 2022 19:12:09 +0100 Subject: [PATCH] opengl: remove some errors, fix some animation bugs --- .../gui/rendering/system/opengl/OpenGLShader.kt | 13 +++++++++++-- .../system/opengl/texture/OpenGLTextureArray.kt | 2 +- .../rendering/shader/includes/animation/buffer.glsl | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLShader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLShader.kt index 4f4e87352..138ba8d46 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLShader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/OpenGLShader.kt @@ -104,8 +104,13 @@ class OpenGLShader( renderWindow.renderSystem.shaders += this } + private fun getUniformLocation(uniformName: String): Int { - return glGetUniformLocation(shader, uniformName) + val location = glGetUniformLocation(shader, uniformName) + if (location < 0) { + throw IllegalArgumentException("No uniform named$uniformName!") + } + return location } override fun setFloat(uniformName: String, value: Float) { @@ -151,7 +156,11 @@ class OpenGLShader( } override fun setUniformBuffer(uniformName: String, uniformBuffer: OpenGLUniformBuffer) { - glUniformBlockBinding(shader, glGetUniformBlockIndex(shader, uniformName), uniformBuffer.bindingIndex) + val index = glGetUniformBlockIndex(shader, uniformName) + if (index < 0) { + throw IllegalArgumentException("No uniform buffer called $uniformName") + } + glUniformBlockBinding(shader, index, uniformBuffer.bindingIndex) } fun unsafeUse() { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/texture/OpenGLTextureArray.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/texture/OpenGLTextureArray.kt index 69b8e1c78..c1d112334 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/texture/OpenGLTextureArray.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/opengl/texture/OpenGLTextureArray.kt @@ -169,7 +169,7 @@ class OpenGLTextureArray( for ((level, data) in mipMaps.withIndex()) { val size = texture.size shr level - glTexSubImage3D(GL_TEXTURE_2D_ARRAY, level, 0, 0, renderData.index, size.x, size.y, level + 1, GL_RGBA, GL_UNSIGNED_BYTE, data) + glTexSubImage3D(GL_TEXTURE_2D_ARRAY, level, 0, 0, renderData.index, size.x, size.y, 1, GL_RGBA, GL_UNSIGNED_BYTE, data) } texture.data = null diff --git a/src/main/resources/assets/minosoft/rendering/shader/includes/animation/buffer.glsl b/src/main/resources/assets/minosoft/rendering/shader/includes/animation/buffer.glsl index a3a9328da..56eb2b070 100644 --- a/src/main/resources/assets/minosoft/rendering/shader/includes/animation/buffer.glsl +++ b/src/main/resources/assets/minosoft/rendering/shader/includes/animation/buffer.glsl @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -layout(std140) uniform uAnimationBuffer +layout(std140) uniform uSpriteBuffer { uvec4 uAnimationData[ANIMATED_TEXTURE_COUNT]; };