renderWindow: properly crash when error happens in camera

This commit is contained in:
Bixilon 2022-12-16 10:28:59 +01:00
parent a96b520331
commit 50ca6b3dae
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
2 changed files with 17 additions and 5 deletions

View File

@ -14,6 +14,9 @@
package de.bixilon.minosoft.gui.rendering package de.bixilon.minosoft.gui.rendering
import de.bixilon.kotlinglm.vec2.Vec2i import de.bixilon.kotlinglm.vec2.Vec2i
import de.bixilon.kutil.concurrent.pool.DefaultThreadPool
import de.bixilon.kutil.concurrent.pool.ThreadPool
import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable
import de.bixilon.kutil.concurrent.queue.Queue import de.bixilon.kutil.concurrent.queue.Queue
import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.latch.CountUpAndDownLatch
import de.bixilon.kutil.math.simple.DoubleMath.rounded10 import de.bixilon.kutil.math.simple.DoubleMath.rounded10
@ -21,6 +24,7 @@ import de.bixilon.kutil.observer.DataObserver.Companion.observe
import de.bixilon.kutil.observer.DataObserver.Companion.observed import de.bixilon.kutil.observer.DataObserver.Companion.observed
import de.bixilon.kutil.primitive.BooleanUtil.decide import de.bixilon.kutil.primitive.BooleanUtil.decide
import de.bixilon.kutil.time.TimeUtil.millis import de.bixilon.kutil.time.TimeUtil.millis
import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash
import de.bixilon.minosoft.gui.rendering.camera.Camera import de.bixilon.minosoft.gui.rendering.camera.Camera
import de.bixilon.minosoft.gui.rendering.events.ResizeWindowEvent import de.bixilon.minosoft.gui.rendering.events.ResizeWindowEvent
import de.bixilon.minosoft.gui.rendering.events.WindowCloseEvent import de.bixilon.minosoft.gui.rendering.events.WindowCloseEvent
@ -317,4 +321,15 @@ class RenderWindow(
guiRenderer.pause(pause) guiRenderer.pause(pause)
} }
} }
fun runAsync(runnable: () -> Unit) {
DefaultThreadPool += ThreadPoolRunnable(ThreadPool.Priorities.HIGHER) {
try {
runnable()
} catch (error: Throwable) {
error.printStackTrace()
Exception("Exception in rendering: $connection", error).crash()
}
}
}
} }

View File

@ -13,9 +13,6 @@
package de.bixilon.minosoft.gui.rendering.camera package de.bixilon.minosoft.gui.rendering.camera
import de.bixilon.kutil.concurrent.pool.DefaultThreadPool
import de.bixilon.kutil.concurrent.pool.ThreadPool
import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable
import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.latch.CountUpAndDownLatch
import de.bixilon.kutil.time.TimeUtil.millis import de.bixilon.kutil.time.TimeUtil.millis
import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity
@ -49,8 +46,8 @@ class Camera(
view.draw() view.draw()
matrixHandler.draw() matrixHandler.draw()
val latch = CountUpAndDownLatch(2) val latch = CountUpAndDownLatch(2)
DefaultThreadPool += ThreadPoolRunnable(ThreadPool.Priorities.HIGHER) { visibilityGraph.draw();latch.dec() } renderWindow.runAsync { visibilityGraph.draw();latch.dec() }
DefaultThreadPool += ThreadPoolRunnable(ThreadPool.Priorities.HIGHER) { targetHandler.raycast();latch.dec() } renderWindow.runAsync { targetHandler.raycast();latch.dec() }
fogManager.draw() fogManager.draw()
latch.await() latch.await()
} }