From 13037f4e0aa3c4a8b25bb4bc07d1eaeb0e85444e Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Thu, 6 Feb 2025 10:00:29 +0100 Subject: [PATCH] renderer manager: enqueue async preparing directly after sync preparing and wait after all were enqueued. Async renderers can now already complete their preparing when others are still preparing in their sync phase. This should reduce the frame time a bit. It can even be enhanced with some feedback/task scheduler (track what time it takes avg and queue that one first next frame or so). --- .../rendering/renderer/renderer/RendererManager.kt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt index 19406d942..3ae971d49 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/renderer/renderer/RendererManager.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2024 Moritz Zwerger + * Copyright (C) 2020-2025 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -96,16 +96,16 @@ class RendererManager( } private fun prepare() { + val latch = SimpleLatch(0) + val worker = UnconditionalWorker(autoWork = true) + for (renderer in list) { renderer.prePrepareDraw() + if (renderer is AsyncRenderer) { + worker += UnconditionalTask(priority = ThreadPool.HIGHER) { renderer.prepareDrawAsync() } + } } - val latch = SimpleLatch(0) - val worker = UnconditionalWorker() - for (renderer in list) { - if (renderer !is AsyncRenderer) continue - worker += UnconditionalTask(priority = ThreadPool.HIGHER) { renderer.prepareDrawAsync() } - } worker.work(latch) for (renderer in list) {