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
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.latch.CountUpAndDownLatch
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.primitive.BooleanUtil.decide
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.events.ResizeWindowEvent
import de.bixilon.minosoft.gui.rendering.events.WindowCloseEvent
@ -317,4 +321,15 @@ class RenderWindow(
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
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.time.TimeUtil.millis
import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity
@ -49,8 +46,8 @@ class Camera(
view.draw()
matrixHandler.draw()
val latch = CountUpAndDownLatch(2)
DefaultThreadPool += ThreadPoolRunnable(ThreadPool.Priorities.HIGHER) { visibilityGraph.draw();latch.dec() }
DefaultThreadPool += ThreadPoolRunnable(ThreadPool.Priorities.HIGHER) { targetHandler.raycast();latch.dec() }
renderWindow.runAsync { visibilityGraph.draw();latch.dec() }
renderWindow.runAsync { targetHandler.raycast();latch.dec() }
fogManager.draw()
latch.await()
}