diff --git a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java index 9452aa8c1..4cf54bbea 100644 --- a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java @@ -21,6 +21,7 @@ import java.util.*; import java.util.concurrent.*; import java.util.concurrent.locks.ReentrantLock; +import com.seibel.lod.objects.DataPoint; import org.lwjgl.opengl.GL11; import com.seibel.lod.handlers.LodConfig; @@ -154,7 +155,7 @@ public class LodBufferBuilder // =====================// // RENDERING PART // // =====================// - + ConcurrentMap> adjMap = new ConcurrentSkipListMap<>(); for (int xRegion = 0; xRegion < lodDim.regions.length; xRegion++) { @@ -173,7 +174,7 @@ public class LodBufferBuilder return; Callable dataToRenderThread = () -> { - SortedSet nodeToRender = new TreeSet(); + Set nodeToRender = new HashSet<>(); lodDim.getDataToRender( nodeToRender, regionPos, @@ -193,6 +194,7 @@ public class LodBufferBuilder try { + boolean disableFix = false; if (lodDim.doesDataExist(posToRender.clone())) { short[] lodData = lodDim.getData(posToRender); @@ -200,14 +202,16 @@ public class LodBufferBuilder for (int x : new int[]{0, 1}) { adjPos.changeParameters(posToRender.detailLevel, posToRender.posX + x * 2 - 1, posToRender.posZ); - if (!renderer.vanillaRenderedChunks.contains(adjPos.getChunkPos())) + if (!renderer.vanillaRenderedChunks.contains(adjPos.getChunkPos()) + && (nodeToRender.contains(adjPos) || disableFix)) adjData[0][x] = lodDim.getData(adjPos); } for (int z : new int[]{0, 1}) { adjPos.changeParameters(posToRender.detailLevel, posToRender.posX, posToRender.posZ + z * 2 - 1); - if (!renderer.vanillaRenderedChunks.contains(adjPos.getChunkPos())) + if (!renderer.vanillaRenderedChunks.contains(adjPos.getChunkPos()) + && (nodeToRender.contains(adjPos) || disableFix)) adjData[1][z] = lodDim.getData(adjPos); } LodConfig.CLIENT.lodTemplate.get().template.addLodToBuffer(currentBuffer, playerBlockPos, lodData, adjData, @@ -265,11 +269,14 @@ public class LodBufferBuilder // mark that the buildable buffers as ready to swap switchVbos = true; - } catch (Exception e) + } catch ( + Exception e) + { ClientProxy.LOGGER.warn("\"LodNodeBufferBuilder.generateLodBuffersAsync\" ran into trouble: "); e.printStackTrace(); } finally + { // regardless of if we successfully created the buffers // we are done generating. @@ -290,9 +297,9 @@ public class LodBufferBuilder } - //===============================// - // BufferBuilder related methods // - //===============================// +//===============================// +// BufferBuilder related methods // +//===============================// /** diff --git a/src/main/java/com/seibel/lod/objects/LodDimension.java b/src/main/java/com/seibel/lod/objects/LodDimension.java index c4ea3ba88..5a27846f6 100644 --- a/src/main/java/com/seibel/lod/objects/LodDimension.java +++ b/src/main/java/com/seibel/lod/objects/LodDimension.java @@ -522,7 +522,7 @@ public class LodDimension * * @return list of nodes */ - public void getDataToRender(SortedSet dataToRender, RegionPos regionPos, int playerPosX, int playerPosZ) + public void getDataToRender(Set dataToRender, RegionPos regionPos, int playerPosX, int playerPosZ) { LevelPos regionLevelPos = new LevelPos(LodUtil.REGION_DETAIL_LEVEL, regionPos.x, regionPos.z); try diff --git a/src/main/java/com/seibel/lod/objects/LodRegion.java b/src/main/java/com/seibel/lod/objects/LodRegion.java index a07b79c46..b64342728 100644 --- a/src/main/java/com/seibel/lod/objects/LodRegion.java +++ b/src/main/java/com/seibel/lod/objects/LodRegion.java @@ -304,7 +304,7 @@ public class LodRegion implements Serializable /** * @return */ - public void getDataToRender(SortedSet dataToRender, int playerPosX, int playerPosZ) + public void getDataToRender(Set dataToRender, int playerPosX, int playerPosZ) { LevelPos levelPos = new LevelPos(LodUtil.REGION_DETAIL_LEVEL, 0, 0); getDataToRender(dataToRender, levelPos, playerPosX, playerPosZ); @@ -313,7 +313,7 @@ public class LodRegion implements Serializable /** * @return */ - private void getDataToRender(SortedSet dataToRender, LevelPos levelPos, int playerPosX, int playerPosZ) + private void getDataToRender(Set dataToRender, LevelPos levelPos, int playerPosX, int playerPosZ) { int size = 1 << (LodUtil.REGION_DETAIL_LEVEL - levelPos.detailLevel); diff --git a/src/main/java/com/seibel/lod/render/LodRenderer.java b/src/main/java/com/seibel/lod/render/LodRenderer.java index 22375940b..bc1e65da8 100644 --- a/src/main/java/com/seibel/lod/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/render/LodRenderer.java @@ -275,7 +275,7 @@ public class LodRenderer //===========================// // set the required open GL settings - GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL); + GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE); //GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE); //GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glDisable(GL11.GL_TEXTURE_2D);