From f8f45818cdbc1cd5cca5dcf9507f779717535e74 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Tue, 14 Dec 2021 23:04:39 +0100 Subject: [PATCH] fix some model loading bugs and font loading bugs --- .../data/registries/versions/Versions.kt | 3 +++ .../minosoft/gui/rendering/font/FontLoader.kt | 1 - .../font/provider/BitmapFontProvider.kt | 22 ++++++++++--------- .../gui/rendering/models/ModelLoader.kt | 3 --- .../system/base/texture/texture/PNGTexture.kt | 2 +- .../rendering/shader/includes/texture.glsl | 2 +- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/versions/Versions.kt b/src/main/java/de/bixilon/minosoft/data/registries/versions/Versions.kt index 3e59f778a..d4b5616ba 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/versions/Versions.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/versions/Versions.kt @@ -87,6 +87,9 @@ object Versions : Iterable { } operator fun get(name: String?): Version? { + if (name == "automatic") { + return AUTOMATIC + } return VERSIONS_BY_NAME[name] } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/FontLoader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/FontLoader.kt index 6b89af39e..de67fce3d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/FontLoader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/FontLoader.kt @@ -46,5 +46,4 @@ object FontLoader : DefaultFactory>( providers = providers, ) } - } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/provider/BitmapFontProvider.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/provider/BitmapFontProvider.kt index d4559a1a4..f8ef44a57 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/provider/BitmapFontProvider.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/provider/BitmapFontProvider.kt @@ -21,7 +21,6 @@ import de.bixilon.minosoft.gui.rendering.font.Font import de.bixilon.minosoft.gui.rendering.textures.TextureUtil.texture import de.bixilon.minosoft.util.KUtil.asList import de.bixilon.minosoft.util.KUtil.toDouble -import de.bixilon.minosoft.util.KUtil.toInt import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.KUtil.unsafeCast import glm_.vec2.Vec2 @@ -30,21 +29,24 @@ class BitmapFontProvider( private val renderWindow: RenderWindow, data: Map, ) : FontProvider { - val height = data["height"]?.toInt() ?: 8 val ascent = data["ascent"].toDouble() private val chars: MutableMap = mutableMapOf() - private val heightScale = Font.CHAR_HEIGHT.toFloat() / height var charWidth = 8 private set init { + val charRows = data["chars"].asList() val texture = renderWindow.textureManager.staticTextures.createTexture(data["file"].toResourceLocation().texture()) texture.load(renderWindow.connection.assetsManager) + + val height = texture.size.y / charRows.size + val heightScale = Font.CHAR_HEIGHT.toFloat() / height + charWidth = texture.size.x / CHARS_PER_ROW val textureData = texture.data!! val pixel = Vec2(1.0f) / texture.size - for ((y, row) in data["chars"].asList().withIndex()) { - val xStart = IntArray(CHARS_PER_ROW) { 8 } + for ((y, row) in charRows.withIndex()) { + val xStart = IntArray(CHARS_PER_ROW) { charWidth } val xEnd = IntArray(CHARS_PER_ROW) { 0 } val yStart = pixel.y * y * height val yEnd = pixel.y * (y + 1) * height @@ -84,14 +86,14 @@ class BitmapFontProvider( y = yEnd, ) - var width = xEnd[x] - xStart[x] + val width = xEnd[x] - xStart[x] + + var scaledWidth = (width * heightScale).toInt() if (width <= 0) { - width = EMPTY_CHAR_WIDTH + scaledWidth = EMPTY_CHAR_WIDTH } - val scaledWidth = (width * heightScale).toInt() - val charData = CharData( renderWindow = renderWindow, char = char.toChar(), @@ -102,7 +104,7 @@ class BitmapFontProvider( uvEnd = uvEnd, ) - chars[char.toChar()] = charData + this.chars[char.toChar()] = charData } } textureData.rewind() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/ModelLoader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/ModelLoader.kt index ee98510a0..41d813528 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/ModelLoader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/ModelLoader.kt @@ -51,9 +51,6 @@ class ModelLoader( } private fun loadBlockStates(block: Block) { - if (block.resourceLocation.path == "grass_block") { - val a = 1 - } val blockStateJson = assetsManager[block.resourceLocation.blockState()].readJsonObject() val model = RootModel(this, blockStateJson) ?: return diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/texture/texture/PNGTexture.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/texture/texture/PNGTexture.kt index 87d3ace61..17173b3fe 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/texture/texture/PNGTexture.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/base/texture/texture/PNGTexture.kt @@ -64,7 +64,7 @@ class PNGTexture(override val resourceLocation: ResourceLocation) : AbstractText val byteOutput = ByteArrayOutputStream() val dataOutput = DataOutputStream(byteOutput) for (color in rgb) { - dataOutput.writeInt(color) + dataOutput.writeInt(color shl 8) } data.put(byteOutput.toByteArray()) diff --git a/src/main/resources/assets/minosoft/rendering/shader/includes/texture.glsl b/src/main/resources/assets/minosoft/rendering/shader/includes/texture.glsl index 0e948a4b6..3d9353ec4 100644 --- a/src/main/resources/assets/minosoft/rendering/shader/includes/texture.glsl +++ b/src/main/resources/assets/minosoft/rendering/shader/includes/texture.glsl @@ -15,7 +15,7 @@ uniform sampler2DArray uTextures[7]; vec4 getTexture(uint textureId, vec3 uv) { // ToDo: This method is just stupid and workarounds a opengl crash with mesa drivers - #ifdef __NVIDIA + #if defined __NVIDIA || defined __AMD return texture(uTextures[textureId], uv); #else switch (textureId) {