diff options
| author | makamys <makamys@outlook.com> | 2021-05-10 15:00:09 +0200 |
|---|---|---|
| committer | makamys <makamys@outlook.com> | 2021-05-10 15:36:42 +0200 |
| commit | f5683b4048072b566839ef07a2b6a06da91a07bc (patch) | |
| tree | 62ebc08999e1356f5f720db77f9e160778c27d07 /src/main/java/makamys/lodmod/mixin | |
| parent | c95e989d793b81530343871a6062059f18bbffdb (diff) | |
| download | Neodymium-f5683b4048072b566839ef07a2b6a06da91a07bc.tar.gz Neodymium-f5683b4048072b566839ef07a2b6a06da91a07bc.tar.bz2 Neodymium-f5683b4048072b566839ef07a2b6a06da91a07bc.zip | |
Fix invisible chunks in OptiFine
Diffstat (limited to 'src/main/java/makamys/lodmod/mixin')
| -rw-r--r-- | src/main/java/makamys/lodmod/mixin/MixinRenderGlobal.java | 17 | ||||
| -rw-r--r-- | src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java | 27 |
2 files changed, 28 insertions, 16 deletions
diff --git a/src/main/java/makamys/lodmod/mixin/MixinRenderGlobal.java b/src/main/java/makamys/lodmod/mixin/MixinRenderGlobal.java index 0981974..196e809 100644 --- a/src/main/java/makamys/lodmod/mixin/MixinRenderGlobal.java +++ b/src/main/java/makamys/lodmod/mixin/MixinRenderGlobal.java @@ -1,6 +1,7 @@ package makamys.lodmod.mixin; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; @@ -14,6 +15,9 @@ import net.minecraft.client.renderer.WorldRenderer; @Mixin(RenderGlobal.class) abstract class MixinRenderGlobal { + @Shadow + private WorldRenderer[] sortedWorldRenderers; + @Redirect(method = "renderSortedRenderers", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderAllRenderLists(ID)V")) private void redirectRenderAllRenderLists(RenderGlobal thiz, int p1, double p2) { if(!LODMod.isActive() || (LODMod.isActive() && LODMod.renderer.renderWorld)) { @@ -21,21 +25,10 @@ abstract class MixinRenderGlobal { } } - @Redirect(method = "renderSortedRenderers", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;getGLCallListForPass(I)I")) - public int redirectCallList(WorldRenderer thiz, int arg) { - int numba = thiz.getGLCallListForPass(arg); - if(LODMod.isActive()) { - if(numba != -1) { - LODMod.renderer.onWorldRendererRender(thiz); - } - } - return numba; - } - @Inject(method = "renderSortedRenderers", at = @At(value = "HEAD")) public void preRenderSortedRenderers(int startRenderer, int numRenderers, int renderPass, double partialTickTime, CallbackInfoReturnable cir) { if(LODMod.isActive()) { - LODMod.renderer.preRenderSortedRenderers(renderPass, partialTickTime); + LODMod.renderer.preRenderSortedRenderers(renderPass, partialTickTime, sortedWorldRenderers); } } } diff --git a/src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java b/src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java index a3a0e60..3dc2187 100644 --- a/src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java +++ b/src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java @@ -45,6 +45,11 @@ abstract class MixinWorldRenderer implements IWorldRenderer { @Shadow private int glRenderList; + boolean lastDrawn; + + @Shadow + public boolean needsUpdate; + public List<ChunkMesh> chunkMeshes = new ArrayList<>(); @Redirect(method = "setPosition", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/Render;renderAABB(Lnet/minecraft/util/AxisAlignedBB;)V")) @@ -66,15 +71,21 @@ abstract class MixinWorldRenderer implements IWorldRenderer { @Inject(method = "updateRenderer", at = @At(value = "HEAD")) private void preUpdateRenderer(CallbackInfo ci) { if(LODMod.isActive()) { - chunkMeshes.clear(); + if(needsUpdate) { + chunkMeshes.clear(); + } else { + chunkMeshes = null; + } } } @Inject(method = "updateRenderer", at = @At(value = "TAIL")) private void postUpdateRenderer(CallbackInfo ci) { if(LODMod.isActive()) { - LODMod.renderer.onWorldRendererPost(WorldRenderer.class.cast(this)); - chunkMeshes.clear(); + if(chunkMeshes != null) { + LODMod.renderer.onWorldRendererPost(WorldRenderer.class.cast(this)); + chunkMeshes.clear(); + } } } @@ -124,7 +135,7 @@ abstract class MixinWorldRenderer implements IWorldRenderer { @Inject(method = "setDontDraw", at = @At(value = "HEAD")) private void preSetDontDraw(CallbackInfo ci) { if(LODMod.isActive()) { - LODMod.renderer.onDontDraw(WorldRenderer.class.cast(this)); + LODMod.renderer.onWorldRendererChanged(WorldRenderer.class.cast(this), false); } } @@ -132,4 +143,12 @@ abstract class MixinWorldRenderer implements IWorldRenderer { public List<ChunkMesh> getChunkMeshes() { return chunkMeshes; } + + public void myTick() { + boolean drawn = isInFrustum && (!skipRenderPass[0] || !skipRenderPass[1]); + if(drawn != lastDrawn) { + LODMod.renderer.onWorldRendererChanged(WorldRenderer.class.cast(this), drawn); + } + lastDrawn = drawn; + } } |
