From 5841b36469c667d5ec2385d181b2334674d981ca Mon Sep 17 00:00:00 2001 From: mcrcortex <18544518+MCRcortex@users.noreply.github.com> Date: Thu, 29 May 2025 22:57:32 +1000 Subject: [PATCH] Updated thing --- .../client/core/IGetVoxyRenderSystem.java | 1 + .../voxy/client/core/VoxyRenderSystem.java | 6 +++++- .../client/core/rendering/RenderService.java | 3 ++- .../mixin/minecraft/MixinWorldRenderer.java | 21 +++++++++++++++++++ .../sodium/MixinDefaultChunkRenderer.java | 7 +++++++ 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/cortex/voxy/client/core/IGetVoxyRenderSystem.java b/src/main/java/me/cortex/voxy/client/core/IGetVoxyRenderSystem.java index 86b6bb1e..3298ed80 100644 --- a/src/main/java/me/cortex/voxy/client/core/IGetVoxyRenderSystem.java +++ b/src/main/java/me/cortex/voxy/client/core/IGetVoxyRenderSystem.java @@ -2,6 +2,7 @@ package me.cortex.voxy.client.core; public interface IGetVoxyRenderSystem { VoxyRenderSystem getVoxyRenderSystem(); + VoxyRenderSystem getVoxyOverworldRenderSystem(); void shutdownRenderer(); void createRenderer(); } diff --git a/src/main/java/me/cortex/voxy/client/core/VoxyRenderSystem.java b/src/main/java/me/cortex/voxy/client/core/VoxyRenderSystem.java index ef686e30..1f28f793 100644 --- a/src/main/java/me/cortex/voxy/client/core/VoxyRenderSystem.java +++ b/src/main/java/me/cortex/voxy/client/core/VoxyRenderSystem.java @@ -61,12 +61,16 @@ public class VoxyRenderSystem { public final ChunkBoundRenderer chunkBoundRenderer; public VoxyRenderSystem(WorldEngine world, ServiceThreadPool threadPool) { + this(world, threadPool, 1L<<32); + } + + public VoxyRenderSystem(WorldEngine world, ServiceThreadPool threadPool, long maxGeometryCapacity) { //Trigger the shared index buffer loading SharedIndexBuffer.INSTANCE.id(); Capabilities.init();//Ensure clinit is called this.worldIn = world; - this.renderer = new RenderService(world, threadPool); + this.renderer = new RenderService(world, threadPool, maxGeometryCapacity); this.postProcessing = new PostProcessing(); int minSec = MinecraftClient.getInstance().world.getBottomSectionCoord()>>5; int maxSec = (MinecraftClient.getInstance().world.getTopSectionCoord()-1)>>5; diff --git a/src/main/java/me/cortex/voxy/client/core/rendering/RenderService.java b/src/main/java/me/cortex/voxy/client/core/rendering/RenderService.java index 2f3067e6..c79e6eb5 100644 --- a/src/main/java/me/cortex/voxy/client/core/rendering/RenderService.java +++ b/src/main/java/me/cortex/voxy/client/core/rendering/RenderService.java @@ -62,11 +62,12 @@ public class RenderService, J extends Vi } @SuppressWarnings("unchecked") - public RenderService(WorldEngine world, ServiceThreadPool serviceThreadPool) { + public RenderService(WorldEngine world, ServiceThreadPool serviceThreadPool, long maxGeometryCapacity) { this.world = world; this.modelService = new ModelBakerySubsystem(world.getMapper()); long geometryCapacity = getGeometryBufferSize(); + geometryCapacity = Math.min(maxGeometryCapacity, geometryCapacity); this.geometryData = (Q) new BasicSectionGeometryData(1<<20, geometryCapacity); 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 fea51c57..4c145b49 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 @@ -11,6 +11,7 @@ import me.cortex.voxy.commonImpl.WorldIdentifier; import net.minecraft.client.render.*; import net.minecraft.client.util.ObjectAllocator; import net.minecraft.client.world.ClientWorld; +import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; import org.joml.Matrix4f; import org.spongepowered.asm.mixin.Mixin; @@ -25,6 +26,8 @@ public abstract class MixinWorldRenderer implements IGetVoxyRenderSystem { @Shadow private Frustum frustum; @Shadow private @Nullable ClientWorld world; @Unique private VoxyRenderSystem renderer; + @Unique private VoxyRenderSystem overworldRenderer; + @Unique private WorldIdentifier overworldIdentifier; @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;setupTerrain(Lnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/Frustum;ZZ)V", shift = At.Shift.AFTER)) private void injectSetup(ObjectAllocator allocator, RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, Matrix4f positionMatrix, Matrix4f projectionMatrix, CallbackInfo ci) { @@ -38,6 +41,11 @@ public abstract class MixinWorldRenderer implements IGetVoxyRenderSystem { return this.renderer; } + @Override + public VoxyRenderSystem getVoxyOverworldRenderSystem() { + return this.renderer; + } + @Inject(method = "reload()V", at = @At("RETURN"), order = 900)//We want to inject before sodium private void reloadVoxyRenderer(CallbackInfo ci) { this.shutdownRenderer(); @@ -51,6 +59,9 @@ public abstract class MixinWorldRenderer implements IGetVoxyRenderSystem { if (this.world != world) { this.shutdownRenderer(); } + if (world!=null&&world.getRegistryKey()==World.OVERWORLD) { + this.overworldIdentifier = WorldIdentifier.of(world); + } } @Inject(method = "close", at = @At("HEAD")) @@ -64,6 +75,10 @@ public abstract class MixinWorldRenderer implements IGetVoxyRenderSystem { this.renderer.shutdown(); this.renderer = null; } + if (this.overworldRenderer != null) { + this.overworldRenderer.shutdown(); + this.overworldRenderer = null; + } } @Override @@ -88,5 +103,11 @@ public abstract class MixinWorldRenderer implements IGetVoxyRenderSystem { return; } this.renderer = new VoxyRenderSystem(world, instance.getThreadPool()); + if (this.world.getRegistryKey()== World.NETHER && this.overworldIdentifier != null) { + var engine = this.overworldIdentifier.getOrCreateEngine(); + if (engine != null) { + this.overworldRenderer = new VoxyRenderSystem(engine, instance.getThreadPool(), 1L<<31); + } + } } } diff --git a/src/main/java/me/cortex/voxy/client/mixin/sodium/MixinDefaultChunkRenderer.java b/src/main/java/me/cortex/voxy/client/mixin/sodium/MixinDefaultChunkRenderer.java index 7b9f5017..2b88ccb7 100644 --- a/src/main/java/me/cortex/voxy/client/mixin/sodium/MixinDefaultChunkRenderer.java +++ b/src/main/java/me/cortex/voxy/client/mixin/sodium/MixinDefaultChunkRenderer.java @@ -26,6 +26,13 @@ public class MixinDefaultChunkRenderer { if (renderer != null) { renderer.renderOpaque(matrices, camera.x, camera.y, camera.z); } + + var overworldRenderer = ((IGetVoxyRenderSystem) MinecraftClient.getInstance().worldRenderer).getVoxyOverworldRenderSystem(); + if (overworldRenderer != null) { + overworldRenderer.renderOpaque(new ChunkRenderMatrices(matrices.projection(), + new Matrix4f(matrices.modelView()).scale(1/8f).scale(1,-1,1)), + camera.x*8, (300-camera.y)*8, (camera.z)*8); + } } } }