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/renderer | |
| 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/renderer')
| -rw-r--r-- | src/main/java/makamys/lodmod/renderer/LODRenderer.java | 45 |
1 files changed, 22 insertions, 23 deletions
diff --git a/src/main/java/makamys/lodmod/renderer/LODRenderer.java b/src/main/java/makamys/lodmod/renderer/LODRenderer.java index a821d73..28dd175 100644 --- a/src/main/java/makamys/lodmod/renderer/LODRenderer.java +++ b/src/main/java/makamys/lodmod/renderer/LODRenderer.java @@ -91,12 +91,18 @@ public class LODRenderer { hasInited = init(); } - public void preRenderSortedRenderers(int renderPass, double alpha) { + public void preRenderSortedRenderers(int renderPass, double alpha, WorldRenderer[] sortedWorldRenderers) { if(renderPass != 0) return; Minecraft.getMinecraft().entityRenderer.enableLightmap((double)alpha); if(hasInited) { + for(WorldRenderer wr : sortedWorldRenderers) { + if(wr != null) { + ((IWorldRenderer)wr).myTick(); + } + } + mainLoop(); handleKeyboard(); gcInterval = 10 * 1000; @@ -416,35 +422,28 @@ public class LODRenderer { ChunkMesh.usedRAM = 0; } - public void onWorldRendererPost(WorldRenderer wr) { - LODChunk lodChunk = getLODChunk(Math.floorDiv(wr.posX, 16), Math.floorDiv(wr.posZ, 16)); - lodChunk.putChunkMeshes(Math.floorDiv(wr.posY, 16), ((IWorldRenderer)wr).getChunkMeshes()); - } - - public void onWorldRendererRender(WorldRenderer wr) { + public void onWorldRendererChanged(WorldRenderer wr, boolean visible) { int x = Math.floorDiv(wr.posX, 16); int y = Math.floorDiv(wr.posY, 16); int z = Math.floorDiv(wr.posZ, 16); - LODChunk lodChunk = getLODChunk(x, z); - setMeshVisible(lodChunk.chunkMeshes[y * 2 + 0], false); - setMeshVisible(lodChunk.chunkMeshes[y * 2 + 1], false); - setMeshVisible(lodChunk.simpleMeshes[0], false); - setMeshVisible(lodChunk.simpleMeshes[1], false); + if(visible) { + setMeshVisible(lodChunk.chunkMeshes[y * 2 + 0], false); + setMeshVisible(lodChunk.chunkMeshes[y * 2 + 1], false); + setMeshVisible(lodChunk.simpleMeshes[0], false); + setMeshVisible(lodChunk.simpleMeshes[1], false); + } else { + setMeshVisible(lodChunk.chunkMeshes[y * 2 + 0], true); + setMeshVisible(lodChunk.chunkMeshes[y * 2 + 1], true); + } } - public void onDontDraw(WorldRenderer wr) { - int chunkX = Math.floorDiv(wr.posX, 16); - int chunkY = Math.floorDiv(wr.posY, 16); - int chunkZ = Math.floorDiv(wr.posZ, 16); - - Entity player = (Entity)Minecraft.getMinecraft().getIntegratedServer().getConfigurationManager().playerEntityList.get(0); - LODChunk lodChunk = getLODChunk(chunkX, chunkZ); - - int y = Math.floorDiv(wr.posY, 16); - setMeshVisible(lodChunk.chunkMeshes[y * 2 + 0], true); - setMeshVisible(lodChunk.chunkMeshes[y * 2 + 1], true); + public void onWorldRendererPost(WorldRenderer wr) { + if(Minecraft.getMinecraft().theWorld.getChunkFromChunkCoords(Math.floorDiv(wr.posX, 16), Math.floorDiv(wr.posZ, 16)).isChunkLoaded) { + LODChunk lodChunk = getLODChunk(Math.floorDiv(wr.posX, 16), Math.floorDiv(wr.posZ, 16)); + lodChunk.putChunkMeshes(Math.floorDiv(wr.posY, 16), ((IWorldRenderer)wr).getChunkMeshes()); + } } private double getLastSortDistanceSq(Entity player) { |
