From 536227206ca959c264a838f3dbc301b63fc9ec19 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 23 Dec 2022 18:48:45 +0100 Subject: [PATCH] world visibility graph: listen for chunk data change This fixes a bug where the world was first rendererd after moving the camera once --- .../rendering/gui/hud/elements/other/DebugHUDElement.kt | 2 +- .../gui/rendering/world/view/WorldVisibilityGraph.kt | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/other/DebugHUDElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/other/DebugHUDElement.kt index c93b0d433..2767883fa 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/other/DebugHUDElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/other/DebugHUDElement.kt @@ -92,7 +92,7 @@ class DebugHUDElement(guiRenderer: GUIRenderer) : Element(guiRenderer), Layouted layout += TextElement(guiRenderer, TextComponent(RunConfiguration.APPLICATION_NAME, ChatColors.RED)) layout += AutoTextElement(guiRenderer, 1) { "FPS §d${renderWindow.renderStats.smoothAvgFPS.rounded10}" } renderWindow.renderer[WorldRenderer]?.apply { - layout += AutoTextElement(guiRenderer, 1) { "C v=${visible.sizeString}, m=${loaded.size.format()}, cQ=${culledQueue.size.format()}, q=${meshingQueue.size.format()}, pT=${meshingQueue.tasks.size.format()}/${meshingQueue.tasks.max.format()}, l=${loadingQueue.size.format()}/${meshingQueue.maxMeshesToLoad.format()}, w=${connection.world.chunks.size.format()}" } + layout += AutoTextElement(guiRenderer, 1) { "C v=${visible.sizeString}, l=${loaded.size.format()}, cQ=${culledQueue.size.format()}, q=${meshingQueue.size.format()}, pT=${meshingQueue.tasks.size.format()}/${meshingQueue.tasks.max.format()}, lQ=${loadingQueue.size.format()}/${meshingQueue.maxMeshesToLoad.format()}, w=${connection.world.chunks.size.format()}" } } layout += renderWindow.renderer[EntityRenderer]?.let { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/world/view/WorldVisibilityGraph.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/world/view/WorldVisibilityGraph.kt index 4571d4f25..d68b21712 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/world/view/WorldVisibilityGraph.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/world/view/WorldVisibilityGraph.kt @@ -33,6 +33,8 @@ import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2iUtil.EMPTY import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.EMPTY import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.chunkPosition import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.sectionHeight +import de.bixilon.minosoft.modding.event.events.blocks.chunk.ChunkDataChangeEvent +import de.bixilon.minosoft.modding.event.listener.CallbackEventListener.Companion.listen import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.chunk.ChunkUtil.isInViewDistance import it.unimi.dsi.fastutil.ints.IntOpenHashSet @@ -85,6 +87,8 @@ class WorldVisibilityGraph( init { calculateGraph() connection.world.occlusionUpdateCallback = this + + connection.events.listen { recalculateNextFrame = true } } fun isInViewDistance(chunkPosition: Vec2i): Boolean { @@ -313,7 +317,7 @@ class WorldVisibilityGraph( @Synchronized private fun calculateGraph() { if (!RenderConstants.OCCLUSION_CULLING_ENABLED) { - connection.fire(VisibilityGraphChangeEvent(renderWindow)) + connection.events.fire(VisibilityGraphChangeEvent(renderWindow)) return } connection.world.chunks.lock.acquire() @@ -355,7 +359,7 @@ class WorldVisibilityGraph( connection.world.chunks.lock.release() - connection.fire(VisibilityGraphChangeEvent(renderWindow)) + connection.events.fire(VisibilityGraphChangeEvent(renderWindow)) } override fun onOcclusionChange() {