From 895895da04757f71167cef05e14bd1a579bcc591 Mon Sep 17 00:00:00 2001 From: cola98765 Date: Mon, 25 Oct 2021 12:43:59 +0200 Subject: [PATCH 1/3] update buffers only when lightmap changes. --- src/main/java/com/seibel/lod/render/LodRenderer.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/seibel/lod/render/LodRenderer.java b/src/main/java/com/seibel/lod/render/LodRenderer.java index 5c6741c75..5a4d91db9 100644 --- a/src/main/java/com/seibel/lod/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/render/LodRenderer.java @@ -105,6 +105,7 @@ public class LodRenderer private int[] previousPos = new int[] { 0, 0, 0 }; public NativeImage lightMap = null; + public NativeImage lastLightMap = null; // these variables are used to determine if the buffers should be rebuilt private float prevSkyBrightness = 0; @@ -881,11 +882,11 @@ public class LodRenderer // check if the vanilla rendered chunks changed if (newTime - prevVanillaChunkTime > LodConfig.CLIENT.advancedModOptions.buffers.rebuildTimes.get().renderedChunkTimeout) { - if (vanillaRenderedChunksChanged) + if (vanillaRenderedChunksChanged && lightMap != lastLightMap) { partialRegen = true; vanillaRenderedChunksChanged = false; - + lastLightMap = lightMap; } prevVanillaChunkTime = newTime; } From bd8ccb4a058f7f2e4b3683e66cab19fff32b0b7b Mon Sep 17 00:00:00 2001 From: cola98765 Date: Mon, 25 Oct 2021 13:20:13 +0200 Subject: [PATCH 2/3] reverted las change, fixed vanillaRenderedChunksChanged at hight altitudes --- .../java/com/seibel/lod/render/LodRenderer.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/seibel/lod/render/LodRenderer.java b/src/main/java/com/seibel/lod/render/LodRenderer.java index 5a4d91db9..c608e72ce 100644 --- a/src/main/java/com/seibel/lod/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/render/LodRenderer.java @@ -132,6 +132,7 @@ public class LodRenderer */ public boolean[][] vanillaRenderedChunks; public boolean vanillaRenderedChunksChanged; + public boolean vanillaRenderedChunksEmptySkip = false; public int vanillaBlockRenderedDistance; @@ -873,6 +874,11 @@ public class LodRenderer prevSkyBrightness = skyBrightness; } + /*if (lightMap != lastLightMap) + { + fullRegen = true; + lastLightMap = lightMap; + }*/ //================// // partial regens // @@ -882,11 +888,10 @@ public class LodRenderer // check if the vanilla rendered chunks changed if (newTime - prevVanillaChunkTime > LodConfig.CLIENT.advancedModOptions.buffers.rebuildTimes.get().renderedChunkTimeout) { - if (vanillaRenderedChunksChanged && lightMap != lastLightMap) + if (vanillaRenderedChunksChanged) { partialRegen = true; vanillaRenderedChunksChanged = false; - lastLightMap = lightMap; } prevVanillaChunkTime = newTime; } @@ -915,6 +920,8 @@ public class LodRenderer int zIndex; for (ChunkPos pos : chunkPosToSkip) { + vanillaRenderedChunksEmptySkip = false; + xIndex = (pos.x - mc.getPlayer().xChunk) + (chunkRenderDistance + 1); zIndex = (pos.z - mc.getPlayer().zChunk) + (chunkRenderDistance + 1); @@ -935,10 +942,11 @@ public class LodRenderer // if the player is high enough, draw all LODs - if (chunkPosToSkip.isEmpty() && mc.getPlayer().position().y > 256) + if (chunkPosToSkip.isEmpty() && mc.getPlayer().position().y > 256 && !vanillaRenderedChunksEmptySkip) { vanillaRenderedChunks = new boolean[vanillaRenderedChunksWidth][vanillaRenderedChunksWidth]; vanillaRenderedChunksChanged = true; + vanillaRenderedChunksEmptySkip = true; } } From b8cba0dc4ce7e1d7c1df4158f40550388a924cd4 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 25 Oct 2021 07:21:17 -0500 Subject: [PATCH 3/3] increase the near clip plane to 1/5 MC's vanilla render distance --- src/main/java/com/seibel/lod/render/LodRenderer.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/seibel/lod/render/LodRenderer.java b/src/main/java/com/seibel/lod/render/LodRenderer.java index 5c6741c75..eeeab48d2 100644 --- a/src/main/java/com/seibel/lod/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/render/LodRenderer.java @@ -266,7 +266,8 @@ public class LodRenderer else farPlaneBlockDistance = LodConfig.CLIENT.graphics.qualityOption.lodChunkRenderDistance.get() * LodUtil.CHUNK_WIDTH; - setupProjectionMatrix(mcProjectionMatrix, partialTicks); + setupProjectionMatrix(mcProjectionMatrix, vanillaBlockRenderedDistance, partialTicks); + // commented out until we can add shaders to handle lighting //setupLighting(lodDim, partialTicks); @@ -555,18 +556,17 @@ public class LodRenderer /** * create a new projection matrix and send it over to the GPU * @param currentProjectionMatrix this is Minecraft's current projection matrix + * @param vanillaBlockRenderedDistance Minecraft's vanilla far plane distance * @param partialTicks how many ticks into the frame we are */ - private void setupProjectionMatrix(Matrix4f currentProjectionMatrix, float partialTicks) + private void setupProjectionMatrix(Matrix4f currentProjectionMatrix, float vanillaBlockRenderedDistance, float partialTicks) { - //Minimum radius of view in 2 render distance - int minDistance = 1; // create the new projection matrix Matrix4f lodPoj = Matrix4f.perspective( getFov(partialTicks, true), (float) this.mc.getWindow().getScreenWidth() / (float) this.mc.getWindow().getScreenHeight(), - minDistance, + vanillaBlockRenderedDistance / 5, farPlaneBlockDistance * LodUtil.CHUNK_WIDTH / 2); // get Minecraft's un-edited projection matrix