korlibs-archive / korge-samples

Korge Samples
55 stars 23 forks source link

Fails to load TTF font #11

Closed soywiz closed 4 years ago

soywiz commented 4 years ago

myfont.zip

suspend fun main() = Korge(width = 512, height = 512, bgcolor = Colors["#2b2b2b"]) {
    val font = resourcesVfs["myfont-bug.ttf"].readTtfFont()
    val bitmap = NativeImage(512, 128).context2d {
        this.font = font
        this.fontSize = 32.0
        this.fillStyle = ColorPaint(Colors.RED)
        this.verticalAlign = VerticalAlign.TOP
        fillText("HELLO WORLD", x = 0.0, y = 0.0)
    }

    image(bitmap)
}
java.lang.ArrayIndexOutOfBoundsException: 13366
        at com.soywiz.korim.font.TtfFont$SimpleGlyph.contour(TtfFont.kt:502)
        at com.soywiz.korim.font.TtfFont$SimpleGlyph.contour$default(TtfFont.kt:501)
        at com.soywiz.korim.font.TtfFont$SimpleGlyph.<init>(TtfFont.kt:514)
        at com.soywiz.korim.font.TtfFont.readGlyph(TtfFont.kt:697)
        at com.soywiz.korim.font.TtfFont.getGlyphByIndex(TtfFont.kt:422)
        at com.soywiz.korim.font.TtfFont.getGlyphByCodePoint(TtfFont.kt:411)
        at com.soywiz.korim.font.TtfFont.getGlyphByCodePoint$default(TtfFont.kt:411)
        at com.soywiz.korim.font.TtfFont.getGlyphMetrics(TtfFont.kt:35)
        at com.soywiz.korim.font.TextRendererActions.getGlyphMetrics(TextRenderer.kt:29)
        at com.soywiz.korim.font.TextRendererKt$CreateStringTextRenderer$1.invoke(TextRenderer.kt:67)
        at com.soywiz.korim.font.TextRendererKt$CreateStringTextRenderer$1.invoke(TextRenderer.kt)
        at com.soywiz.korim.font.FontKt.drawText(Font.kt:100)
        at com.soywiz.korim.font.FontKt.drawText$default(Font.kt:82)
        at com.soywiz.korim.vector.Context2d.rendererRenderSystemText(Context2d.kt:28)
        at com.soywiz.korim.vector.Context2d.fillText(Context2d.kt:31)
        at MainKt$main$2.invokeSuspend(main.kt:18)
        at MainKt$main$2.invoke(main.kt)
        at com.soywiz.korge.Korge$invoke$4$6$1.invokeSuspend(Korge.kt:155)
        at com.soywiz.korge.Korge$invoke$4$6$1.invoke(Korge.kt)
        at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:91)
        at kotlinx.coroutines.CoroutineScopeKt.coroutineScope(CoroutineScope.kt:177)
        at com.soywiz.korge.Korge$invoke$4$6.invokeSuspend(Korge.kt:152)
        at com.soywiz.korge.Korge$invoke$4$6.invoke(Korge.kt)
        at com.soywiz.korio.async.AsyncExtKt$_launch$1.invokeSuspend(AsyncExt.kt:34)
        at com.soywiz.korio.async.AsyncExtKt$_launch$1.invoke(AsyncExt.kt)
        at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:55)
        at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:111)
        at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:158)
        at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:54)
        at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
        at com.soywiz.korio.async.AsyncExtKt._launch(AsyncExt.kt:32)
        at com.soywiz.korio.async.AsyncExtKt.launchImmediately(AsyncExt.kt:9)
        at com.soywiz.korge.Korge$invoke$4.invokeSuspend(Korge.kt:151)
        at com.soywiz.korge.Korge$invoke$4.invoke(Korge.kt)
        at com.soywiz.korgw.x11.X11GameWindow$loop$$inlined$apply$lambda$1.invokeSuspend(X11GameWindowJvm.kt:138)
        at com.soywiz.korgw.x11.X11GameWindow$loop$$inlined$apply$lambda$1.invoke(X11GameWindowJvm.kt)
        at com.soywiz.korio.async.AsyncExtKt$_launch$1.invokeSuspend(AsyncExt.kt:34)
        at com.soywiz.korio.async.AsyncExtKt$_launch$1.invoke(AsyncExt.kt)
        at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:55)
        at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:111)
        at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:158)
        at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:54)
        at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
        at com.soywiz.korio.async.AsyncExtKt._launch(AsyncExt.kt:32)
        at com.soywiz.korio.async.AsyncExtKt.launchImmediately(AsyncExt.kt:9)
        at com.soywiz.korio.async.AsyncExtKt.launchImmediately(AsyncExt.kt:18)
        at com.soywiz.korgw.x11.X11GameWindow.loop(X11GameWindowJvm.kt:137)
        at com.soywiz.korge.Korge.invoke-j2LsEZk(Korge.kt:102)
        at com.soywiz.korge.Korge.invoke-j2LsEZk$default(Korge.kt:96)
        at MainKt.main(main.kt:10)
        at MainKt$$$main.invoke(Unknown Source)
        at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:199)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:114)
        at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)
        at MainKt.main(main.kt)
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 13366
        at com.soywiz.korim.font.TtfFont$SimpleGlyph.contour(TtfFont.kt:502)
        at com.soywiz.korim.font.TtfFont$SimpleGlyph.contour$default(TtfFont.kt:501)
        at com.soywiz.korim.font.TtfFont$SimpleGlyph.<init>(TtfFont.kt:514)
        at com.soywiz.korim.font.TtfFont.readGlyph(TtfFont.kt:697)
        at com.soywiz.korim.font.TtfFont.getGlyphByIndex(TtfFont.kt:422)
        at com.soywiz.korim.font.TtfFont.getGlyphByCodePoint(TtfFont.kt:411)
        at com.soywiz.korim.font.TtfFont.getGlyphByCodePoint$default(TtfFont.kt:411)
        at com.soywiz.korim.font.TtfFont.getGlyphMetrics(TtfFont.kt:35)
        at com.soywiz.korim.font.TextRendererActions.getGlyphMetrics(TextRenderer.kt:29)
        at com.soywiz.korim.font.TextRendererKt$CreateStringTextRenderer$1.invoke(TextRenderer.kt:67)
        at com.soywiz.korim.font.TextRendererKt$CreateStringTextRenderer$1.invoke(TextRenderer.kt)
        at com.soywiz.korim.font.FontKt.drawText(Font.kt:100)
        at com.soywiz.korim.font.FontKt.drawText$default(Font.kt:82)
        at com.soywiz.korim.vector.Context2d.rendererRenderSystemText(Context2d.kt:28)
        at com.soywiz.korim.vector.Context2d.fillText(Context2d.kt:31)
        at MainKt$main$2.invokeSuspend(main.kt:18)
        at MainKt$main$2.invoke(main.kt)
        at com.soywiz.korge.Korge$invoke$4$6$1.invokeSuspend(Korge.kt:155)
        at com.soywiz.korge.Korge$invoke$4$6$1.invoke(Korge.kt)
        at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:91)
        at kotlinx.coroutines.CoroutineScopeKt.coroutineScope(CoroutineScope.kt:177)
        at com.soywiz.korge.Korge$invoke$4$6.invokeSuspend(Korge.kt:152)
        at com.soywiz.korge.Korge$invoke$4$6.invoke(Korge.kt)
        at com.soywiz.korio.async.AsyncExtKt$_launch$1.invokeSuspend(AsyncExt.kt:34)
        at com.soywiz.korio.async.AsyncExtKt$_launch$1.invoke(AsyncExt.kt)
        at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:55)
        at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:111)
        at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:158)
        at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:54)
        at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
        at com.soywiz.korio.async.AsyncExtKt._launch(AsyncExt.kt:32)
        at com.soywiz.korio.async.AsyncExtKt.launchImmediately(AsyncExt.kt:9)
        at com.soywiz.korge.Korge$invoke$4.invokeSuspend(Korge.kt:151)
        at com.soywiz.korge.Korge$invoke$4.invoke(Korge.kt)
        at com.soywiz.korgw.x11.X11GameWindow$loop$$inlined$apply$lambda$1.invokeSuspend(X11GameWindowJvm.kt:138)
        at com.soywiz.korgw.x11.X11GameWindow$loop$$inlined$apply$lambda$1.invoke(X11GameWindowJvm.kt)
        at com.soywiz.korio.async.AsyncExtKt$_launch$1.invokeSuspend(AsyncExt.kt:34)
        at com.soywiz.korio.async.AsyncExtKt$_launch$1.invoke(AsyncExt.kt)
        at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:55)
        at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:111)
        at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:158)
        at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:54)
        at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
        at com.soywiz.korio.async.AsyncExtKt._launch(AsyncExt.kt:32)
        at com.soywiz.korio.async.AsyncExtKt.launchImmediately(AsyncExt.kt:9)
        at com.soywiz.korio.async.AsyncExtKt.launchImmediately(AsyncExt.kt:18)
        at com.soywiz.korgw.x11.X11GameWindow.loop(X11GameWindowJvm.kt:137)
        at com.soywiz.korge.Korge.invoke-j2LsEZk(Korge.kt:102)
        at com.soywiz.korge.Korge.invoke-j2LsEZk$default(Korge.kt:96)
        at MainKt.main(main.kt:10)
        at MainKt$$$main.invoke(Unknown Source)
        at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:199)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:114)
        at kotlin.coroutines.jvm.internal.RunSuspendKt.runSuspend(RunSuspend.kt:19)
        at MainKt.main(main.kt)