From be024f524d1e5f809a1252a722d1f63be1213f76 Mon Sep 17 00:00:00 2001 From: Leonardo Date: Thu, 21 Oct 2021 12:57:40 +0200 Subject: [PATCH] Fixed regions wall not showing (which would cause holes in the rendering) and added border as possible overdraw config --- .../lod/builders/bufferBuilding/LodBufferBuilder.java | 11 +++++------ src/main/java/com/seibel/lod/config/LodConfig.java | 3 ++- .../java/com/seibel/lod/enums/VanillaOverdraw.java | 3 +++ src/main/java/com/seibel/lod/render/LodRenderer.java | 4 +++- src/main/java/com/seibel/lod/util/LodUtil.java | 1 + 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java index f8756b234..616d6d0a5 100644 --- a/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/bufferBuilding/LodBufferBuilder.java @@ -280,8 +280,6 @@ public class LodBufferBuilder int posZ; int xAdj; int zAdj; - int chunkXdist; - int chunkZdist; int bufferIndex; Box box = ThreadMapUtil.getBox(); boolean[] adjShadeDisabled = ThreadMapUtil.getAdjShadeDisabledArray(); @@ -365,11 +363,12 @@ public class LodBufferBuilder //Other wise we check if this position is data = lodDim.getSingleData(detailLevel, xAdj, zAdj); + adjData.get(direction)[0] = DataPointUtil.EMPTY_DATA; + if (isThisPositionGoingToBeRendered(detailLevel, xAdj, zAdj, playerChunkPos, vanillaRenderedChunks, gameChunkRenderDistance) && !DataPointUtil.isVoid(data)) { adjShadeDisabled[Box.DIRECTION_INDEX.get(direction)] = DataPointUtil.getAlpha(data) < 255; - adjData.get(direction)[0] = DataPointUtil.EMPTY_DATA; } } } @@ -494,13 +493,13 @@ public class LodBufferBuilder // check if the chunk is on the border boolean isItBorderPos; - if (LodConfig.CLIENT.graphics.advancedGraphicsOption.vanillaOverdraw.get() == VanillaOverdraw.NEVER) + if (LodConfig.CLIENT.graphics.advancedGraphicsOption.vanillaOverdraw.get() == VanillaOverdraw.BORDER) isItBorderPos = LodUtil.isBorderChunk(vanillaRenderedChunks, chunkXdist + gameChunkRenderDistance + 1, chunkZdist + gameChunkRenderDistance + 1); else isItBorderPos = false; - boolean smallRenderDistance = gameChunkRenderDistance <= LodUtil.MINIMUM_RENDER_DISTANCE_FOR_PARTIAL_OVERDRAW; + //boolean smallRenderDistance = gameChunkRenderDistance <= LodUtil.MINIMUM_RENDER_DISTANCE_FOR_PARTIAL_OVERDRAW; // get the positions that will be rendered @@ -510,7 +509,7 @@ public class LodBufferBuilder && vanillaRenderedChunks[chunkXdist + gameChunkRenderDistance + 1][chunkZdist + gameChunkRenderDistance + 1]; - return (vanillaRenderedPosition && (!(isItBorderPos && smallRenderDistance))); + return (vanillaRenderedPosition && (!(isItBorderPos))); } diff --git a/src/main/java/com/seibel/lod/config/LodConfig.java b/src/main/java/com/seibel/lod/config/LodConfig.java index 2cff1d180..0c630bb04 100644 --- a/src/main/java/com/seibel/lod/config/LodConfig.java +++ b/src/main/java/com/seibel/lod/config/LodConfig.java @@ -270,7 +270,8 @@ public class LodConfig + " " + " More effective on higher render distances. \n" + " " + " For vanilla render distances less than or equal to " + LodUtil.MINIMUM_RENDER_DISTANCE_FOR_PARTIAL_OVERDRAW + " \n" + " " + " " + VanillaOverdraw.NEVER + " or " + VanillaOverdraw.ALWAYS + " may be used depending on the dimension. \n" - + " " + VanillaOverdraw.ALWAYS + ": LODs will render on all vanilla chunks preventing holes in the world. \n") + + " " + VanillaOverdraw.ALWAYS + ": LODs will render on all vanilla chunks preventing holes in the world. \n" + + " " + VanillaOverdraw.BORDER + ": LODs will render only on the border of vanilla chunks preventing only some holes in the world. \n") .defineEnum("Vanilla Overdraw", VanillaOverdraw.DYNAMIC); builder.pop(); } diff --git a/src/main/java/com/seibel/lod/enums/VanillaOverdraw.java b/src/main/java/com/seibel/lod/enums/VanillaOverdraw.java index efe888694..aa980a6ff 100644 --- a/src/main/java/com/seibel/lod/enums/VanillaOverdraw.java +++ b/src/main/java/com/seibel/lod/enums/VanillaOverdraw.java @@ -39,4 +39,7 @@ public enum VanillaOverdraw /** Draw LODs over all minecraft chunks. */ ALWAYS, + + /** Draw LODs over border chunks. */ + BORDER, } \ No newline at end of file diff --git a/src/main/java/com/seibel/lod/render/LodRenderer.java b/src/main/java/com/seibel/lod/render/LodRenderer.java index 4bc940de6..b2d87e2be 100644 --- a/src/main/java/com/seibel/lod/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/render/LodRenderer.java @@ -530,12 +530,14 @@ public class LodRenderer */ private void setupProjectionMatrix(Matrix4f currentProjectionMatrix, float partialTicks) { + //Minimum radious of view in 2 render distance + int minDistance = 8; // create the new projection matrix Matrix4f lodPoj = Matrix4f.perspective( getFov(partialTicks, true), (float) this.mc.getWindow().getScreenWidth() / (float) this.mc.getWindow().getScreenHeight(), - mc.getRenderDistance() / 2, + minDistance, farPlaneBlockDistance * LodUtil.CHUNK_WIDTH / 2); // get Minecraft's un-edited projection matrix diff --git a/src/main/java/com/seibel/lod/util/LodUtil.java b/src/main/java/com/seibel/lod/util/LodUtil.java index 41dc22d1f..b5d8472ff 100644 --- a/src/main/java/com/seibel/lod/util/LodUtil.java +++ b/src/main/java/com/seibel/lod/util/LodUtil.java @@ -411,6 +411,7 @@ public class LodUtil break; default: + case BORDER: case NEVER: // skip chunks in render distance that are rendered // by vanilla minecraft