From 8a8cc8c423c6165d14b26b7da73681044c44f39d Mon Sep 17 00:00:00 2001 From: mcrcortex <18544518+MCRcortex@users.noreply.github.com> Date: Thu, 1 May 2025 12:05:48 +1000 Subject: [PATCH] Shuffle classes and remove some unused classes --- .../voxy/client/VoxyClientInstance.java | 34 +++++ .../client/core/IGetVoxyRenderSystem.java | 2 - .../me/cortex/voxy/client/core/VoxelCore.java | 139 ------------------ .../{rendering => }/VoxyRenderSystem.java | 6 +- .../voxy/client/core/WorldImportWrapper.java | 112 -------------- .../core/rendering/ChunkBoundRenderer.java | 8 +- .../rendering/hierachical/DebugRenderer.java | 2 +- .../HierarchicalOcclusionTraverser.java | 11 +- .../rendering/hierachical/NodeCleaner.java | 9 +- .../section/MDICSectionRenderer.java | 7 +- .../rendering/{ => util}/LightMapHelper.java | 2 +- .../rendering/{ => util}/PrintfDebugUtil.java | 2 +- .../{ => util}/SharedIndexBuffer.java | 3 +- .../mixin/minecraft/MixinWorldRenderer.java | 2 +- .../cortex/voxy/commonImpl/ImportManager.java | 7 + .../cortex/voxy/commonImpl/VoxyInstance.java | 2 - 16 files changed, 57 insertions(+), 291 deletions(-) delete mode 100644 src/main/java/me/cortex/voxy/client/core/VoxelCore.java rename src/main/java/me/cortex/voxy/client/core/{rendering => }/VoxyRenderSystem.java (98%) delete mode 100644 src/main/java/me/cortex/voxy/client/core/WorldImportWrapper.java rename src/main/java/me/cortex/voxy/client/core/rendering/{ => util}/LightMapHelper.java (93%) rename src/main/java/me/cortex/voxy/client/core/rendering/{ => util}/PrintfDebugUtil.java (97%) rename src/main/java/me/cortex/voxy/client/core/rendering/{ => util}/SharedIndexBuffer.java (97%) diff --git a/src/main/java/me/cortex/voxy/client/VoxyClientInstance.java b/src/main/java/me/cortex/voxy/client/VoxyClientInstance.java index 9b264634..b05f8bcd 100644 --- a/src/main/java/me/cortex/voxy/client/VoxyClientInstance.java +++ b/src/main/java/me/cortex/voxy/client/VoxyClientInstance.java @@ -2,11 +2,13 @@ package me.cortex.voxy.client; import me.cortex.voxy.client.config.VoxyConfig; import me.cortex.voxy.client.saver.ContextSelectionSystem; +import me.cortex.voxy.common.Logger; import me.cortex.voxy.common.util.Pair; import me.cortex.voxy.common.world.WorldEngine; import me.cortex.voxy.commonImpl.IVoxyWorld; import me.cortex.voxy.commonImpl.ImportManager; import me.cortex.voxy.commonImpl.VoxyInstance; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.world.ClientWorld; import java.util.Random; @@ -99,4 +101,36 @@ public class VoxyClientInstance extends VoxyInstance { ser.shutdown(); System.out.println("Total "+delta+"ms " + ((double)delta/c) + "ms average total, avg wrt threads: " + (((double)delta/c)*engine.instanceIn.getThreadPool().getThreadCount()) + "ms"); } + + + private void verifyTopNodeChildren(int X, int Y, int Z) { + var world = this.getOrMakeRenderWorld(MinecraftClient.getInstance().world); + for (int lvl = 0; lvl < 5; lvl++) { + for (int y = (Y<<5)>>lvl; y < ((Y+1)<<5)>>lvl; y++) { + for (int x = (X<<5)>>lvl; x < ((X+1)<<5)>>lvl; x++) { + for (int z = (Z<<5)>>lvl; z < ((Z+1)<<5)>>lvl; z++) { + if (lvl == 0) { + var own = world.acquire(lvl, x, y, z); + if ((own.getNonEmptyChildren() != 0) ^ (own.getNonEmptyBlockCount() != 0)) { + Logger.error("Lvl 0 node not marked correctly " + WorldEngine.pprintPos(own.key)); + } + own.release(); + } else { + byte msk = 0; + for (int child = 0; child < 8; child++) { + var section = world.acquire(lvl-1, (child&1)+(x<<1), ((child>>2)&1)+(y<<1), ((child>>1)&1)+(z<<1)); + msk |= (byte) (section.getNonEmptyBlockCount()!=0?(1< world engine -> raw render data -> render data - - - -//REDESIGN THIS PIECE OF SHIT SPAGETTY SHIT FUCK -// like Get rid of interactor and renderer being seperate just fucking put them together -// fix the callback bullshit spagetti -//REMOVE setRenderGen like holy hell -public class VoxelCore { - private final WorldEngine world; - public final ServiceThreadPool serviceThreadPool; - public final WorldImportWrapper importer; - - public VoxelCore(ContextSelectionSystem.Selection worldSelection) { - var cfg = worldSelection.getConfig(); - this.serviceThreadPool = new ServiceThreadPool(VoxyConfig.CONFIG.serviceThreads); - - this.world = null;//worldSelection.createEngine(this.serviceThreadPool); - Logger.info("Initializing voxy core"); - - this.importer = new WorldImportWrapper(this.serviceThreadPool, this.world); - - Logger.info("Voxy core initialized"); - - //this.verifyTopNodeChildren(0,0,0); - - //this.testMeshingPerformance(); - - //this.testDbPerformance(); - //this.testFullMesh(); - } - - public void addDebugInfo(List debug) { - debug.add(""); - debug.add(""); - /* - debug.add("Ingest service tasks: " + this.world.ingestService.getTaskCount()); - debug.add("Saving service tasks: " + this.world.savingService.getTaskCount()); - debug.add("Render service tasks: " + this.renderGen.getTaskCount()); - */ - this.world.addDebugData(debug); - - } - - //Note: when doing translucent rendering, only need to sort when generating the geometry, or when crossing into the center zone - // cause in 99.99% of cases the sections dont need to be sorted - // since they are AABBS crossing the normal is impossible without one of the axis being equal - - public void shutdown() { - - //if (Thread.currentThread() != this.shutdownThread) { - // Runtime.getRuntime().removeShutdownHook(this.shutdownThread); - //} - - //this.world.getMapper().forceResaveStates(); - this.importer.shutdown(); - Logger.info("Shutting down world engine"); - try {this.world.free();} catch (Exception e) {Logger.error("Error shutting down world engine", e);} - Logger.info("Shutting down service thread pool"); - this.serviceThreadPool.shutdown(); - Logger.info("Voxel core shut down"); - } - - public WorldEngine getWorldEngine() { - return this.world; - } - - - - - - private void verifyTopNodeChildren(int X, int Y, int Z) { - for (int lvl = 0; lvl < 5; lvl++) { - for (int y = (Y<<5)>>lvl; y < ((Y+1)<<5)>>lvl; y++) { - for (int x = (X<<5)>>lvl; x < ((X+1)<<5)>>lvl; x++) { - for (int z = (Z<<5)>>lvl; z < ((Z+1)<<5)>>lvl; z++) { - if (lvl == 0) { - var own = this.world.acquire(lvl, x, y, z); - if ((own.getNonEmptyChildren() != 0) ^ (own.getNonEmptyBlockCount() != 0)) { - Logger.error("Lvl 0 node not marked correctly " + WorldEngine.pprintPos(own.key)); - } - own.release(); - } else { - byte msk = 0; - for (int child = 0; child < 8; child++) { - var section = this.world.acquire(lvl-1, (child&1)+(x<<1), ((child>>2)&1)+(y<<1), ((child>>1)&1)+(z<<1)); - msk |= (byte) (section.getNonEmptyBlockCount()!=0?(1< { - if (System.currentTimeMillis() - ticker[0] > 50) { - ticker[0] = System.currentTimeMillis(); - MinecraftClient.getInstance().executeSync(() -> { - Taskbar.INSTANCE.setProgress(a, Math.max(1, b)); - bossBar.setPercent(((float) a) / ((float) Math.max(1, b))); - bossBar.setName(Text.of("Voxy import: " + a + "/" + b + " chunks")); - }); - } - }, - chunkCount -> { - MinecraftClient.getInstance().executeSync(()-> { - MinecraftClient.getInstance().inGameHud.getBossBarHud().bossBars.remove(this.importerBossBarUUID); - this.importerBossBarUUID = null; - long delta = Math.max(System.currentTimeMillis() - start, 1); - - String msg = "Voxy world import finished in " + (delta/1000) + " seconds, averaging " + (int)(chunkCount/(delta/1000f)) + " chunks per second"; - MinecraftClient.getInstance().inGameHud.getChatHud().addMessage(Text.literal(msg)); - Logger.info(msg); - Taskbar.INSTANCE.setIsNone(); - if (this.importer != null) { - this.importer.shutdown(); - this.importer = null; - } - }); - }); - - return true; - } - - public boolean isImporterRunning() { - return this.importer != null; - } -} diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/ChunkBoundRenderer.java b/src/main/java/me/cortex/voxy/client/core/rendering/ChunkBoundRenderer.java index 3e7f1a45..1ae09125 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/ChunkBoundRenderer.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/ChunkBoundRenderer.java @@ -1,31 +1,25 @@ package me.cortex.voxy.client.core.rendering; -import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap; import me.cortex.voxy.client.core.gl.GlBuffer; import me.cortex.voxy.client.core.gl.GlFramebuffer; import me.cortex.voxy.client.core.gl.GlTexture; import me.cortex.voxy.client.core.gl.shader.Shader; import me.cortex.voxy.client.core.gl.shader.ShaderType; +import me.cortex.voxy.client.core.rendering.util.SharedIndexBuffer; import me.cortex.voxy.client.core.rendering.util.UploadStream; import net.minecraft.util.math.MathHelper; import org.joml.Matrix4f; -import org.joml.Vector3f; import org.joml.Vector3i; import org.lwjgl.system.MemoryUtil; -import static me.cortex.voxy.client.core.rendering.PrintfDebugUtil.PRINTF_processor; import static org.lwjgl.opengl.GL11.GL_TRIANGLES; import static org.lwjgl.opengl.GL11.GL_UNSIGNED_BYTE; import static org.lwjgl.opengl.GL15.GL_ELEMENT_ARRAY_BUFFER; import static org.lwjgl.opengl.GL15.glBindBuffer; -import static org.lwjgl.opengl.GL30.glBindBufferBase; import static org.lwjgl.opengl.GL30.glBindVertexArray; import static org.lwjgl.opengl.GL30C.*; -import static org.lwjgl.opengl.GL31.GL_UNIFORM_BUFFER; import static org.lwjgl.opengl.GL31.glDrawElementsInstanced; -import static org.lwjgl.opengl.GL40C.GL_DRAW_INDIRECT_BUFFER; -import static org.lwjgl.opengl.GL43.GL_SHADER_STORAGE_BUFFER; import static org.lwjgl.opengl.GL45.glClearNamedFramebufferfv; //This is a render subsystem, its very simple in what it does diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/DebugRenderer.java b/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/DebugRenderer.java index 2f75196f..3401eefb 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/DebugRenderer.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/DebugRenderer.java @@ -4,7 +4,7 @@ import me.cortex.voxy.client.core.gl.GlBuffer; import me.cortex.voxy.client.core.gl.shader.Shader; import me.cortex.voxy.client.core.gl.shader.ShaderType; import me.cortex.voxy.client.core.rendering.RenderService; -import me.cortex.voxy.client.core.rendering.SharedIndexBuffer; +import me.cortex.voxy.client.core.rendering.util.SharedIndexBuffer; import me.cortex.voxy.client.core.rendering.Viewport; import me.cortex.voxy.client.core.rendering.util.UploadStream; import net.minecraft.util.math.MathHelper; diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/HierarchicalOcclusionTraverser.java b/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/HierarchicalOcclusionTraverser.java index b4f9733d..9f26de94 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/HierarchicalOcclusionTraverser.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/HierarchicalOcclusionTraverser.java @@ -7,21 +7,14 @@ import me.cortex.voxy.client.core.gl.GlBuffer; import me.cortex.voxy.client.core.gl.shader.AutoBindingShader; import me.cortex.voxy.client.core.gl.shader.Shader; import me.cortex.voxy.client.core.gl.shader.ShaderType; -import me.cortex.voxy.client.core.rendering.PrintfDebugUtil; +import me.cortex.voxy.client.core.rendering.util.PrintfDebugUtil; import me.cortex.voxy.client.core.rendering.util.HiZBuffer; import me.cortex.voxy.client.core.rendering.Viewport; import me.cortex.voxy.client.core.rendering.util.DownloadStream; import me.cortex.voxy.client.core.rendering.util.UploadStream; -import net.minecraft.util.math.MathHelper; -import org.joml.FrustumIntersection; -import org.joml.Matrix4f; -import org.joml.Vector3f; -import org.joml.Vector4f; import org.lwjgl.system.MemoryUtil; -import java.lang.reflect.Field; - -import static me.cortex.voxy.client.core.rendering.PrintfDebugUtil.PRINTF_processor; +import static me.cortex.voxy.client.core.rendering.util.PrintfDebugUtil.PRINTF_processor; import static org.lwjgl.opengl.GL11.*; import static org.lwjgl.opengl.GL12.GL_UNPACK_IMAGE_HEIGHT; import static org.lwjgl.opengl.GL12.GL_UNPACK_SKIP_IMAGES; diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/NodeCleaner.java b/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/NodeCleaner.java index a90bc6f5..a8f401ec 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/NodeCleaner.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/hierachical/NodeCleaner.java @@ -1,23 +1,16 @@ package me.cortex.voxy.client.core.rendering.hierachical; -import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; -import it.unimi.dsi.fastutil.ints.IntArrayFIFOQueue; -import it.unimi.dsi.fastutil.ints.IntCollection; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; -import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap; import me.cortex.voxy.client.core.gl.GlBuffer; import me.cortex.voxy.client.core.gl.shader.AutoBindingShader; -import me.cortex.voxy.client.core.gl.shader.PrintfInjector; import me.cortex.voxy.client.core.gl.shader.Shader; import me.cortex.voxy.client.core.gl.shader.ShaderType; -import me.cortex.voxy.client.core.rendering.PrintfDebugUtil; +import me.cortex.voxy.client.core.rendering.util.PrintfDebugUtil; import me.cortex.voxy.client.core.rendering.util.DownloadStream; import me.cortex.voxy.client.core.rendering.util.UploadStream; -import me.cortex.voxy.common.world.WorldEngine; import org.lwjgl.system.MemoryUtil; import static org.lwjgl.opengl.ARBDirectStateAccess.glCopyNamedBufferSubData; -import static org.lwjgl.opengl.GL20.glUniform1i; import static org.lwjgl.opengl.GL30C.glBindBufferRange; import static org.lwjgl.opengl.GL42C.glMemoryBarrier; import static org.lwjgl.opengl.GL43C.*; diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/section/MDICSectionRenderer.java b/src/main/java/me/cortex/voxy/client/core/rendering/section/MDICSectionRenderer.java index 4947478a..e19366ea 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/section/MDICSectionRenderer.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/section/MDICSectionRenderer.java @@ -6,16 +6,13 @@ import me.cortex.voxy.client.core.gl.GlBuffer; import me.cortex.voxy.client.core.gl.shader.Shader; import me.cortex.voxy.client.core.gl.shader.ShaderType; import me.cortex.voxy.client.core.model.ModelStore; -import me.cortex.voxy.client.core.rendering.LightMapHelper; +import me.cortex.voxy.client.core.rendering.util.LightMapHelper; import me.cortex.voxy.client.core.rendering.RenderService; -import me.cortex.voxy.client.core.rendering.SharedIndexBuffer; +import me.cortex.voxy.client.core.rendering.util.SharedIndexBuffer; import me.cortex.voxy.client.core.rendering.util.DownloadStream; import me.cortex.voxy.client.core.rendering.util.UploadStream; import me.cortex.voxy.common.Logger; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.util.math.MathHelper; import org.joml.Matrix4f; -import org.joml.Vector3f; import org.lwjgl.system.MemoryUtil; import java.util.List; diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/LightMapHelper.java b/src/main/java/me/cortex/voxy/client/core/rendering/util/LightMapHelper.java similarity index 93% rename from src/main/java/me/cortex/voxy/client/core/rendering/LightMapHelper.java rename to src/main/java/me/cortex/voxy/client/core/rendering/util/LightMapHelper.java index 0f9bf9c0..1f873765 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/LightMapHelper.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/util/LightMapHelper.java @@ -1,4 +1,4 @@ -package me.cortex.voxy.client.core.rendering; +package me.cortex.voxy.client.core.rendering.util; import me.cortex.voxy.client.core.gl.GlBuffer; import me.cortex.voxy.client.core.gl.GlTexture; diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/PrintfDebugUtil.java b/src/main/java/me/cortex/voxy/client/core/rendering/util/PrintfDebugUtil.java similarity index 97% rename from src/main/java/me/cortex/voxy/client/core/rendering/PrintfDebugUtil.java rename to src/main/java/me/cortex/voxy/client/core/rendering/util/PrintfDebugUtil.java index 89f3d8b8..26b86172 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/PrintfDebugUtil.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/util/PrintfDebugUtil.java @@ -1,4 +1,4 @@ -package me.cortex.voxy.client.core.rendering; +package me.cortex.voxy.client.core.rendering.util; import me.cortex.voxy.client.core.gl.shader.IShaderProcessor; import me.cortex.voxy.client.core.gl.shader.PrintfInjector; diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/SharedIndexBuffer.java b/src/main/java/me/cortex/voxy/client/core/rendering/util/SharedIndexBuffer.java similarity index 97% rename from src/main/java/me/cortex/voxy/client/core/rendering/SharedIndexBuffer.java rename to src/main/java/me/cortex/voxy/client/core/rendering/util/SharedIndexBuffer.java index b583c52a..137d0d24 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/SharedIndexBuffer.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/util/SharedIndexBuffer.java @@ -1,7 +1,6 @@ -package me.cortex.voxy.client.core.rendering; +package me.cortex.voxy.client.core.rendering.util; import me.cortex.voxy.client.core.gl.GlBuffer; -import me.cortex.voxy.client.core.rendering.util.UploadStream; import me.cortex.voxy.client.core.util.IndexUtil; import me.cortex.voxy.common.util.MemoryBuffer; import org.lwjgl.system.MemoryUtil; diff --git a/src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinWorldRenderer.java b/src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinWorldRenderer.java index 1d8b1c51..3e30f471 100644 --- a/src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinWorldRenderer.java +++ b/src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinWorldRenderer.java @@ -3,7 +3,7 @@ package me.cortex.voxy.client.mixin.minecraft; import me.cortex.voxy.client.VoxyClientInstance; import me.cortex.voxy.client.config.VoxyConfig; import me.cortex.voxy.client.core.IGetVoxyRenderSystem; -import me.cortex.voxy.client.core.rendering.VoxyRenderSystem; +import me.cortex.voxy.client.core.VoxyRenderSystem; import me.cortex.voxy.common.Logger; import me.cortex.voxy.common.world.WorldEngine; import me.cortex.voxy.commonImpl.IVoxyWorld; diff --git a/src/main/java/me/cortex/voxy/commonImpl/ImportManager.java b/src/main/java/me/cortex/voxy/commonImpl/ImportManager.java index 82995299..b03850e1 100644 --- a/src/main/java/me/cortex/voxy/commonImpl/ImportManager.java +++ b/src/main/java/me/cortex/voxy/commonImpl/ImportManager.java @@ -1,5 +1,6 @@ package me.cortex.voxy.commonImpl; +import me.cortex.voxy.client.taskbar.Taskbar; import me.cortex.voxy.common.thread.ServiceThreadPool; import me.cortex.voxy.common.world.WorldEngine; import me.cortex.voxy.commonImpl.importers.IDataImporter; @@ -14,6 +15,12 @@ import java.util.function.IntConsumer; import java.util.function.Supplier; public class ImportManager { + //TODO: + //Taskbar.INSTANCE.setProgress(0,10000); + //Taskbar.INSTANCE.setIsProgression(); + //Taskbar.INSTANCE.setProgress(a, Math.max(1, b)); + //Taskbar.INSTANCE.setIsNone(); + private final Map activeImporters = new HashMap<>(); protected class ImportTask { diff --git a/src/main/java/me/cortex/voxy/commonImpl/VoxyInstance.java b/src/main/java/me/cortex/voxy/commonImpl/VoxyInstance.java index 73b8811c..1b997812 100644 --- a/src/main/java/me/cortex/voxy/commonImpl/VoxyInstance.java +++ b/src/main/java/me/cortex/voxy/commonImpl/VoxyInstance.java @@ -1,6 +1,5 @@ package me.cortex.voxy.commonImpl; -import me.cortex.voxy.client.core.WorldImportWrapper; import me.cortex.voxy.common.Logger; import me.cortex.voxy.common.config.section.SectionStorage; import me.cortex.voxy.common.thread.ServiceThreadPool; @@ -8,7 +7,6 @@ import me.cortex.voxy.common.util.MemoryBuffer; import me.cortex.voxy.common.world.WorldEngine; import me.cortex.voxy.common.world.service.SectionSavingService; import me.cortex.voxy.common.world.service.VoxelIngestService; -import net.minecraft.client.world.ClientWorld; import java.util.HashSet; import java.util.List;