diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/manager/FontManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/manager/FontManager.kt index 63e80790d..9e5c4b512 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/manager/FontManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/manager/FontManager.kt @@ -21,7 +21,6 @@ import de.bixilon.minosoft.gui.rendering.font.loader.FontLoader import de.bixilon.minosoft.gui.rendering.font.types.FontType import de.bixilon.minosoft.gui.rendering.font.types.PostInitFontType import de.bixilon.minosoft.gui.rendering.font.types.font.EmptyFont -import de.bixilon.minosoft.gui.rendering.font.types.font.Font import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType @@ -30,6 +29,7 @@ class FontManager( val default: FontType, ) { + fun postInit(latch: AbstractLatch) { if (default is PostInitFontType) { default.postInit(latch) @@ -37,7 +37,7 @@ class FontManager( } - operator fun get(font: ResourceLocation?): Font? = null + operator fun get(font: ResourceLocation?): FontType? = null companion object { fun create(context: RenderContext, latch: AbstractLatch): FontManager { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/types/unicode/unihex/UnifontRasterizer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/types/unicode/unihex/UnifontRasterizer.kt index 1a9db07d9..c6fafa16f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/types/unicode/unihex/UnifontRasterizer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/types/unicode/unihex/UnifontRasterizer.kt @@ -15,6 +15,7 @@ package de.bixilon.minosoft.gui.rendering.font.types.unicode.unihex import de.bixilon.minosoft.gui.rendering.font.renderer.code.CodePointRenderer import de.bixilon.minosoft.gui.rendering.system.base.texture.array.StaticTextureArray +import de.bixilon.minosoft.gui.rendering.system.opengl.texture.OpenGLTextureArray.Companion.TEXTURE_RESOLUTION_ID_MAP class UnifontRasterizer( private val array: StaticTextureArray, @@ -26,8 +27,12 @@ class UnifontRasterizer( fun add(data: ByteArray): CodePointRenderer = add(data.size / (HEIGHT / Byte.SIZE_BITS), data) fun add(width: Int, data: ByteArray): CodePointRenderer { - for (texture in textures) { - texture.add(width, data)?.let { return it } + val iterator = textures.iterator() + for (texture in iterator) { + val code = texture.add(width, data) ?: continue + if (texture.totalRemaining == 0) iterator.remove() + this.width -= width + return code } val renderer = createTexture().add(width, data)!! this.width -= width @@ -35,7 +40,13 @@ class UnifontRasterizer( } private fun calculateRows(width: Int): Int { - return 1024 / 16 + for (index in TEXTURE_RESOLUTION_ID_MAP.size - 1 downTo 0) { + val resolution = TEXTURE_RESOLUTION_ID_MAP[index] + val size = resolution * resolution / HEIGHT + if (width >= size) return resolution / HEIGHT + } + + return 1 } private fun createTexture(): UnifontTexture { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/types/unicode/unihex/UnifontTexture.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/types/unicode/unihex/UnifontTexture.kt index 0c090d0da..72d27e762 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/types/unicode/unihex/UnifontTexture.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/types/unicode/unihex/UnifontTexture.kt @@ -44,6 +44,7 @@ class UnifontTexture( override val state: TextureStates = TextureStates.LOADED private val remaining = IntArray(rows) { size.x } + var totalRemaining = size.x * rows override fun load(context: RenderContext) = Unit @@ -51,6 +52,7 @@ class UnifontTexture( for ((index, remaining) in remaining.withIndex()) { if (remaining < width) continue this.remaining[index] = remaining - width + totalRemaining -= width return rasterize(index, size.x - remaining, width, data) }