From 81d664707466ff7d3eed9b4f54efbac05cacf2e6 Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Mon, 10 Mar 2025 15:49:22 +0100 Subject: [PATCH] occlusion tracer: only store path by axis Its not possible that 2 different direction on the same axis are stored at the same position. Halves the temporary memory. --- .../gui/rendering/camera/occlusion/OcclusionTracer.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/camera/occlusion/OcclusionTracer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/camera/occlusion/OcclusionTracer.kt index 1f6649d68..5d24ccc99 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/camera/occlusion/OcclusionTracer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/camera/occlusion/OcclusionTracer.kt @@ -40,7 +40,7 @@ class OcclusionTracer( private val skip = SectionPositionSet(chunkPosition, viewDistance, minSection, dimension.sections + 2) // TODO: reuse private val visible = SectionPositionSet(chunkPosition, viewDistance, minSection, dimension.sections + 2) - private val paths = Array(6) { SectionPositionSet(chunkPosition, viewDistance, minSection, dimension.sections + 2) } + private val paths = Array(Axes.VALUES.size) { SectionPositionSet(chunkPosition, viewDistance, minSection, dimension.sections + 2) } private inline fun isInViewDistance(chunk: Chunk): Boolean { @@ -56,14 +56,14 @@ class OcclusionTracer( val position = SectionPosition.of(chunk.position, height) if (position in skip) return - if (position in paths[direction.ordinal]) return // path from same source direction already taken + if (position in paths[direction.axis.ordinal]) return // path from same source direction already taken val section = chunk[height] if (!frustum.containsChunkSection(position)) { skip += position return } - paths[direction.ordinal] += position + paths[direction.axis.ordinal] += position visible += position