From 7d53da40ec68e46c17b022cef05e8ab414e3eb8f Mon Sep 17 00:00:00 2001 From: cola98765 Date: Mon, 17 Jan 2022 16:27:36 +0100 Subject: [PATCH] Revert "resolved couple warnings. If it causes problems just revert it." This reverts commit 4702aa7888202b9c0b1e17387792577d09209c4e. --- .../com/seibel/lod/core/api/ClientApi.java | 4 +- .../bufferBuilding/CubicLodTemplate.java | 4 +- .../LodBufferBuilderFactory.java | 10 ++- .../core/builders/lodBuilding/LodBuilder.java | 4 + .../enums/config/DistanceGenerationMode.java | 4 +- .../core/enums/config/VerticalQuality.java | 4 +- .../handlers/LodDimensionFileHandler.java | 8 +- .../lod/core/objects/BlockBiomeCouple.java | 15 ++-- .../lod/core/objects/VertexOptimizer.java | 15 ++-- .../lod/core/objects/lod/LevelContainer.java | 1 + .../lod/core/objects/lod/LodDimension.java | 8 +- .../objects/lod/VerticalLevelContainer.java | 28 +++---- .../core/objects/opengl/LodVertexBuffer.java | 1 + .../com/seibel/lod/core/render/GLProxy.java | 82 ++++++++++--------- .../seibel/lod/core/render/LodFogConfig.java | 2 +- .../seibel/lod/core/render/LodRenderer.java | 11 ++- .../objects/VertexAttributePreGL43.java | 20 ++--- .../lod/core/util/BooleanMovableGridList.java | 54 ++++++------ .../seibel/lod/core/util/DataPointUtil.java | 10 ++- .../com/seibel/lod/core/util/GridList.java | 4 +- .../seibel/lod/core/util/MovableGridList.java | 12 +-- .../wrapperInterfaces/IWrapperFactory.java | 2 +- .../chunk/IChunkWrapper.java | 1 + .../config/ILodConfigWrapperSingleton.java | 4 +- .../minecraft/IMinecraftRenderWrapper.java | 12 +-- .../modAccessor/IModAccessor.java | 2 +- .../world/IWorldWrapper.java | 1 + 27 files changed, 181 insertions(+), 142 deletions(-) diff --git a/src/main/java/com/seibel/lod/core/api/ClientApi.java b/src/main/java/com/seibel/lod/core/api/ClientApi.java index c910b8be0..287747c15 100644 --- a/src/main/java/com/seibel/lod/core/api/ClientApi.java +++ b/src/main/java/com/seibel/lod/core/api/ClientApi.java @@ -76,8 +76,8 @@ public class ClientApi } - private final ConcurrentHashMap.KeySetView generating = ConcurrentHashMap.newKeySet(); - private final ConcurrentHashMap.KeySetView toBeLoaded = ConcurrentHashMap.newKeySet(); + private ConcurrentHashMap.KeySetView generating = ConcurrentHashMap.newKeySet(); + private ConcurrentHashMap.KeySetView toBeLoaded = ConcurrentHashMap.newKeySet(); public void clientChunkLoadEvent(IChunkWrapper chunk, IWorldWrapper world) { diff --git a/src/main/java/com/seibel/lod/core/builders/bufferBuilding/CubicLodTemplate.java b/src/main/java/com/seibel/lod/core/builders/bufferBuilding/CubicLodTemplate.java index 0d9a4294d..76730bc06 100644 --- a/src/main/java/com/seibel/lod/core/builders/bufferBuilding/CubicLodTemplate.java +++ b/src/main/java/com/seibel/lod/core/builders/bufferBuilding/CubicLodTemplate.java @@ -28,6 +28,8 @@ import com.seibel.lod.core.objects.opengl.LodBufferBuilder; import com.seibel.lod.core.util.ColorUtil; import com.seibel.lod.core.util.DataPointUtil; import com.seibel.lod.core.util.LodUtil; +import com.seibel.lod.core.util.SingletonHandler; +import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import static com.seibel.lod.core.builders.lodBuilding.LodBuilder.MIN_WORLD_HEIGHT; @@ -72,7 +74,7 @@ public class CubicLodTemplate playerZ, adjData, color, - DataPointUtil.getLightSky(data), + DataPointUtil.getLightSkyAlt(data), DataPointUtil.getLightBlock(data), adjShadeDisabled); diff --git a/src/main/java/com/seibel/lod/core/builders/bufferBuilding/LodBufferBuilderFactory.java b/src/main/java/com/seibel/lod/core/builders/bufferBuilding/LodBufferBuilderFactory.java index 218c3bf9d..fb56e2d42 100644 --- a/src/main/java/com/seibel/lod/core/builders/bufferBuilding/LodBufferBuilderFactory.java +++ b/src/main/java/com/seibel/lod/core/builders/bufferBuilding/LodBufferBuilderFactory.java @@ -85,8 +85,8 @@ public class LodBufferBuilderFactory } public static class Pos { - public final int x; - public final int y; + public int x; + public int y; public Pos(int xx, int yy) { x = xx; @@ -359,10 +359,12 @@ public class LodBufferBuilderFactory if (!future.get()) { ClientApi.LOGGER.error("LodBufferBuilder ran into trouble and had to start over."); + continue; } } catch (Exception e) { ClientApi.LOGGER.error("LodBufferBuilder ran into trouble: "); e.printStackTrace(); + continue; } } @@ -665,6 +667,8 @@ public class LodBufferBuilderFactory GpuUploadMethod uploadMethod = glProxy.getGpuUploadMethod(); // determine the upload timeout + int MBPerMS = CONFIG.client().advanced().buffers().getGpuUploadPerMegabyteInMilliseconds(); + long BPerNS = MBPerMS; // MB -> B = 1/1,000,000. MS -> NS = 1,000,000. So, MBPerMS = BPerNS. long remainingNS = 0; // We don't want to pause for like 0.1 ms... so we store those tiny MS. long bytesUploaded = 0; @@ -693,7 +697,7 @@ public class LodBufferBuilderFactory // upload buffers over an extended period of time // to hopefully prevent stuttering. - remainingNS += uploadBuffer.capacity()* (long) CONFIG.client().advanced().buffers().getGpuUploadPerMegabyteInMilliseconds(); + remainingNS += uploadBuffer.capacity()*BPerNS; bytesUploaded += uploadBuffer.capacity(); if (remainingNS >= TimeUnit.NANOSECONDS.convert(1000/60, TimeUnit.MILLISECONDS)) { if (remainingNS > MAX_BUFFER_UPLOAD_TIMEOUT_NANOSECONDS) remainingNS = MAX_BUFFER_UPLOAD_TIMEOUT_NANOSECONDS; diff --git a/src/main/java/com/seibel/lod/core/builders/lodBuilding/LodBuilder.java b/src/main/java/com/seibel/lod/core/builders/lodBuilding/LodBuilder.java index eef7db4d7..ff2989b43 100644 --- a/src/main/java/com/seibel/lod/core/builders/lodBuilding/LodBuilder.java +++ b/src/main/java/com/seibel/lod/core/builders/lodBuilding/LodBuilder.java @@ -22,13 +22,17 @@ package com.seibel.lod.core.builders.lodBuilding; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.seibel.lod.core.api.ClientApi; import com.seibel.lod.core.enums.config.DistanceGenerationMode; +import com.seibel.lod.core.enums.config.HorizontalResolution; import com.seibel.lod.core.objects.lod.LodDimension; import com.seibel.lod.core.objects.lod.LodRegion; import com.seibel.lod.core.objects.lod.LodWorld; import com.seibel.lod.core.util.ColorUtil; import com.seibel.lod.core.util.DataPointUtil; import com.seibel.lod.core.util.DetailDistanceUtil; +import com.seibel.lod.core.util.LevelPosUtil; import com.seibel.lod.core.util.LodThreadFactory; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.util.SingletonHandler; diff --git a/src/main/java/com/seibel/lod/core/enums/config/DistanceGenerationMode.java b/src/main/java/com/seibel/lod/core/enums/config/DistanceGenerationMode.java index 09a6549f2..6f33cdf4f 100644 --- a/src/main/java/com/seibel/lod/core/enums/config/DistanceGenerationMode.java +++ b/src/main/java/com/seibel/lod/core/enums/config/DistanceGenerationMode.java @@ -107,6 +107,7 @@ public enum DistanceGenerationMode case BIOME_ONLY: return DistanceGenerationMode.NONE; case NONE: + return null; default: return null; } @@ -115,6 +116,8 @@ public enum DistanceGenerationMode // Note: return null if out of range public static DistanceGenerationMode next(DistanceGenerationMode mode) { switch (mode) { + case FULL: + return null; case FEATURES: return DistanceGenerationMode.FULL; case SURFACE: @@ -125,7 +128,6 @@ public enum DistanceGenerationMode return DistanceGenerationMode.BIOME_ONLY_SIMULATE_HEIGHT; case NONE: return DistanceGenerationMode.BIOME_ONLY; - case FULL: default: return null; } diff --git a/src/main/java/com/seibel/lod/core/enums/config/VerticalQuality.java b/src/main/java/com/seibel/lod/core/enums/config/VerticalQuality.java index 1ab8b20a1..48a1bcfe7 100644 --- a/src/main/java/com/seibel/lod/core/enums/config/VerticalQuality.java +++ b/src/main/java/com/seibel/lod/core/enums/config/VerticalQuality.java @@ -60,6 +60,7 @@ public enum VerticalQuality case MEDIUM: return VerticalQuality.LOW; case LOW: + return null; default: return null; } @@ -68,11 +69,12 @@ public enum VerticalQuality // Note: return null if out of range public static VerticalQuality next(VerticalQuality mode) { switch (mode) { + case HIGH: + return null; case MEDIUM: return VerticalQuality.HIGH; case LOW: return VerticalQuality.MEDIUM; - case HIGH: default: return null; } diff --git a/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java b/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java index 971c3a154..5935407fd 100644 --- a/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java +++ b/src/main/java/com/seibel/lod/core/handlers/LodDimensionFileHandler.java @@ -57,7 +57,7 @@ import com.seibel.lod.core.util.LodUtil; public class LodDimensionFileHandler { /** This is the dimension that owns this file handler */ - private final LodDimension lodDimension; + private LodDimension lodDimension; private final File dimensionDataSaveFolder; @@ -88,10 +88,10 @@ public class LodDimensionFileHandler * Allow saving asynchronously, but never try to save multiple regions * at a time */ - private final AtomicBoolean isFileWritingThreadRunning = new AtomicBoolean(false); + private AtomicBoolean isFileWritingThreadRunning = new AtomicBoolean(false); private ExecutorService fileWritingThreadPool = Executors.newSingleThreadExecutor(new LodThreadFactory(this.getClass().getSimpleName())); - private final ConcurrentHashMap regionToSave = new ConcurrentHashMap(); + private ConcurrentHashMap regionToSave = new ConcurrentHashMap(); public LodDimensionFileHandler(File newSaveFolder, LodDimension newLodDimension) @@ -173,6 +173,7 @@ public class LodDimensionFileHandler + ". File has been deleted."); // This should not break, but be continue to see whether other detail levels can be loaded or updated region.addLevelContainer(new VerticalLevelContainer(tempDetailLevel)); + continue; } else if (fileVersion > LOD_SAVE_FILE_VERSION) { @@ -186,6 +187,7 @@ public class LodDimensionFileHandler + " this region will not be written to in order to protect the newer file."); // This should not break, but be continue to see whether other detail levels can be loaded or updated region.addLevelContainer(new VerticalLevelContainer(tempDetailLevel)); + continue; } else if (fileVersion < LOD_SAVE_FILE_VERSION) { diff --git a/src/main/java/com/seibel/lod/core/objects/BlockBiomeCouple.java b/src/main/java/com/seibel/lod/core/objects/BlockBiomeCouple.java index 2bfd426a0..45bb67123 100644 --- a/src/main/java/com/seibel/lod/core/objects/BlockBiomeCouple.java +++ b/src/main/java/com/seibel/lod/core/objects/BlockBiomeCouple.java @@ -3,21 +3,22 @@ package com.seibel.lod.core.objects; import com.seibel.lod.core.wrapperInterfaces.block.IBlockColorWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper; +import java.util.HashMap; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class BlockBiomeCouple { - public static final ConcurrentMap noBiomeIstanceCache = new ConcurrentHashMap<>(); - public static final ConcurrentMap> withBiomeIstanceCache = new ConcurrentHashMap<>(); + public static ConcurrentMap noBiomeIstanceCache = new ConcurrentHashMap<>(); + public static ConcurrentMap> withBiomeIstanceCache = new ConcurrentHashMap<>(); - final String blockName; - final String biomeName; - final String coupleName; + String blockName; + String biomeName; + String coupleName; - final IBiomeWrapper biomeColor; - final IBlockColorWrapper blockColor; + IBiomeWrapper biomeColor; + IBlockColorWrapper blockColor; public static void addBlockBiomeToCache(IBlockColorWrapper blockColor){ } diff --git a/src/main/java/com/seibel/lod/core/objects/VertexOptimizer.java b/src/main/java/com/seibel/lod/core/objects/VertexOptimizer.java index 962b4417b..fb58e5ff6 100644 --- a/src/main/java/com/seibel/lod/core/objects/VertexOptimizer.java +++ b/src/main/java/com/seibel/lod/core/objects/VertexOptimizer.java @@ -30,6 +30,7 @@ import com.seibel.lod.core.util.ColorUtil; import com.seibel.lod.core.util.DataPointUtil; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.util.SingletonHandler; +import com.seibel.lod.core.wrapperInterfaces.block.AbstractBlockPosWrapper; import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftWrapper; @@ -328,7 +329,7 @@ public class VertexOptimizer singleAdjDataPoint = adjData.get(LodDirection.DOWN)[0]; skipBot = DataPointUtil.doesItExist(singleAdjDataPoint) && DataPointUtil.getHeight(singleAdjDataPoint) == minY;// && DataPointUtil.getAlpha(singleAdjDataPoint) == 255; if(DataPointUtil.doesItExist(singleAdjDataPoint)) - skyLights.get(LodDirection.DOWN)[0] = DataPointUtil.getLightSky(singleAdjDataPoint); + skyLights.get(LodDirection.DOWN)[0] = DataPointUtil.getLightSkyAlt(singleAdjDataPoint); else skyLights.get(LodDirection.DOWN)[0] = skyLights.get(LodDirection.UP)[0]; //other sided @@ -378,12 +379,12 @@ public class VertexOptimizer { adjHeight.get(lodDirection)[0] = getMaxY(); adjDepth.get(lodDirection)[0] = getMinY(); - skyLights.get(lodDirection)[0] = DataPointUtil.getLightSky(singleAdjDataPoint); //skyLights.get(Direction.UP)[0]; + skyLights.get(lodDirection)[0] = DataPointUtil.getLightSkyAlt(singleAdjDataPoint); //skyLights.get(Direction.UP)[0]; } else { adjDepth.get(lodDirection)[faceToDraw] = getMinY(); - skyLights.get(lodDirection)[faceToDraw] = DataPointUtil.getLightSky(singleAdjDataPoint); + skyLights.get(lodDirection)[faceToDraw] = DataPointUtil.getLightSkyAlt(singleAdjDataPoint); } faceToDraw++; toFinish = false; @@ -409,12 +410,12 @@ public class VertexOptimizer { adjHeight.get(lodDirection)[0] = getMaxY(); adjDepth.get(lodDirection)[0] = height; - skyLights.get(lodDirection)[0] = DataPointUtil.getLightSky(singleAdjDataPoint); //skyLights.get(Direction.UP)[0]; + skyLights.get(lodDirection)[0] = DataPointUtil.getLightSkyAlt(singleAdjDataPoint); //skyLights.get(Direction.UP)[0]; } else { adjDepth.get(lodDirection)[faceToDraw] = height; - skyLights.get(lodDirection)[faceToDraw] = DataPointUtil.getLightSky(singleAdjDataPoint); + skyLights.get(lodDirection)[faceToDraw] = DataPointUtil.getLightSkyAlt(singleAdjDataPoint); } toFinish = false; faceToDraw++; @@ -442,7 +443,7 @@ public class VertexOptimizer } adjDepth.get(lodDirection)[faceToDraw] = height; - skyLights.get(lodDirection)[faceToDraw] = DataPointUtil.getLightSky(singleAdjDataPoint); + skyLights.get(lodDirection)[faceToDraw] = DataPointUtil.getLightSkyAlt(singleAdjDataPoint); faceToDraw++; adjHeight.get(lodDirection)[faceToDraw] = depth; firstFace = false; @@ -466,7 +467,7 @@ public class VertexOptimizer { singleAdjDataPoint = dataPoint[toFinishIndex]; if (DataPointUtil.doesItExist(singleAdjDataPoint)) - skyLights.get(lodDirection)[faceToDraw] = DataPointUtil.getLightSky(singleAdjDataPoint); + skyLights.get(lodDirection)[faceToDraw] = DataPointUtil.getLightSkyAlt(singleAdjDataPoint); else skyLights.get(lodDirection)[faceToDraw] = skyLights.get(LodDirection.UP)[0]; } diff --git a/src/main/java/com/seibel/lod/core/objects/lod/LevelContainer.java b/src/main/java/com/seibel/lod/core/objects/lod/LevelContainer.java index f05f4001c..898da841f 100644 --- a/src/main/java/com/seibel/lod/core/objects/lod/LevelContainer.java +++ b/src/main/java/com/seibel/lod/core/objects/lod/LevelContainer.java @@ -21,6 +21,7 @@ package com.seibel.lod.core.objects.lod; import java.io.DataOutputStream; import java.io.IOException; +import java.io.OutputStream; /** * A level container is a quad tree level diff --git a/src/main/java/com/seibel/lod/core/objects/lod/LodDimension.java b/src/main/java/com/seibel/lod/core/objects/lod/LodDimension.java index 64070b1f0..86e902457 100644 --- a/src/main/java/com/seibel/lod/core/objects/lod/LodDimension.java +++ b/src/main/java/com/seibel/lod/core/objects/lod/LodDimension.java @@ -22,6 +22,7 @@ package com.seibel.lod.core.objects.lod; import java.io.File; import java.io.IOException; import java.util.Arrays; +import java.util.Comparator; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -39,6 +40,7 @@ import com.seibel.lod.core.util.LevelPosUtil; import com.seibel.lod.core.util.LodThreadFactory; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.util.SingletonHandler; +import com.seibel.lod.core.wrapperInterfaces.IWrapperFactory; import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IDimensionTypeWrapper; @@ -157,8 +159,10 @@ public class LodDimension } } Arrays.sort(list, (a, b) -> { - double disSqrA = a.x* a.x+ a.z* a.z; - double disSqrB = b.x* b.x+ b.z* b.z; + RegionPos posA = (RegionPos)a; + RegionPos posB = (RegionPos)b; + double disSqrA = posA.x*posA.x+posA.z*posA.z; + double disSqrB = posB.x*posB.x+posB.z*posB.z; return Double.compare(disSqrA, disSqrB); }); iteratorList = list; diff --git a/src/main/java/com/seibel/lod/core/objects/lod/VerticalLevelContainer.java b/src/main/java/com/seibel/lod/core/objects/lod/VerticalLevelContainer.java index e52337eeb..ea7b59a30 100644 --- a/src/main/java/com/seibel/lod/core/objects/lod/VerticalLevelContainer.java +++ b/src/main/java/com/seibel/lod/core/objects/lod/VerticalLevelContainer.java @@ -22,9 +22,13 @@ package com.seibel.lod.core.objects.lod; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.nio.LongBuffer; +import com.seibel.lod.core.api.ClientApi; import com.seibel.lod.core.dataFormat.*; import com.seibel.lod.core.enums.config.DistanceGenerationMode; import com.seibel.lod.core.util.*; @@ -98,8 +102,8 @@ public class VerticalLevelContainer implements LevelContainer } else { if (compare<=0) return false; } - if (verticalSize >= 0) - System.arraycopy(data, 0, dataContainer, index, verticalSize); + for (int verticalIndex = 0; verticalIndex < verticalSize; verticalIndex++) + dataContainer[index + verticalIndex] = data[verticalIndex]; return true; } @@ -417,14 +421,12 @@ public class VerticalLevelContainer implements LevelContainer //STEP 1// //We initially reset this position of the data container - final int k = posX * size + posZ; - positionDataContainer[k] = PositionDataFormat.EMPTY_DATA; + positionDataContainer[posX * size + posZ] = PositionDataFormat.EMPTY_DATA; for (int verticalIndex = 0; verticalIndex < verticalSize; verticalIndex++) { - final int j = k * verticalSize + verticalIndex; - verticalDataContainer[j] = VerticalDataFormat.EMPTY_LOD; - lightDataContainer[j] = 0; - colorDataContainer[j] = 0; + verticalDataContainer[posX * size * verticalSize + posZ * verticalSize + verticalIndex] = VerticalDataFormat.EMPTY_LOD; + lightDataContainer[posX * size * verticalSize + posZ * verticalSize + verticalIndex] = 0; + colorDataContainer[posX * size * verticalSize + posZ * verticalSize + verticalIndex] = 0; } @@ -758,14 +760,12 @@ public class VerticalLevelContainer implements LevelContainer //SPLITTED VERSION OF THE MERGE AND ADD private void resetPosition(int posX, int posZ) { - final int i = posX * size + posZ; - positionDataContainer[i] = PositionDataFormat.EMPTY_DATA; + positionDataContainer[posX * size + posZ] = PositionDataFormat.EMPTY_DATA; for (int verticalIndex = 0; verticalIndex < verticalSize; verticalIndex++) { - final int j = i * verticalSize + verticalIndex; - verticalDataContainer[j] = VerticalDataFormat.EMPTY_LOD; - lightDataContainer[j] = 0; - colorDataContainer[j] = 0; + verticalDataContainer[posX * size * verticalSize + posZ * verticalSize + verticalIndex] = VerticalDataFormat.EMPTY_LOD; + lightDataContainer[posX * size * verticalSize + posZ * verticalSize + verticalIndex] = 0; + colorDataContainer[posX * size * verticalSize + posZ * verticalSize + verticalIndex] = 0; } } diff --git a/src/main/java/com/seibel/lod/core/objects/opengl/LodVertexBuffer.java b/src/main/java/com/seibel/lod/core/objects/opengl/LodVertexBuffer.java index 570695ba2..14127a28d 100644 --- a/src/main/java/com/seibel/lod/core/objects/opengl/LodVertexBuffer.java +++ b/src/main/java/com/seibel/lod/core/objects/opengl/LodVertexBuffer.java @@ -21,6 +21,7 @@ package com.seibel.lod.core.objects.opengl; import org.lwjgl.opengl.GL32; +import com.seibel.lod.core.api.ClientApi; import com.seibel.lod.core.enums.rendering.GLProxyContext; import com.seibel.lod.core.render.GLProxy; diff --git a/src/main/java/com/seibel/lod/core/render/GLProxy.java b/src/main/java/com/seibel/lod/core/render/GLProxy.java index 9421c1e6d..42707bd82 100644 --- a/src/main/java/com/seibel/lod/core/render/GLProxy.java +++ b/src/main/java/com/seibel/lod/core/render/GLProxy.java @@ -40,6 +40,7 @@ import com.seibel.lod.core.api.ClientApi; import com.seibel.lod.core.enums.config.GpuUploadMethod; import com.seibel.lod.core.enums.rendering.DebugMode; import com.seibel.lod.core.enums.rendering.GLProxyContext; +import com.seibel.lod.core.util.LodThreadFactory; import com.seibel.lod.core.util.SingletonHandler; import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import com.seibel.lod.core.wrapperInterfaces.minecraft.IMinecraftWrapper; @@ -104,49 +105,54 @@ public class GLProxy private String getFailedVersionInfo(GLCapabilities c) { + StringBuilder str = new StringBuilder("Your supported OpenGL version:\n"); - return "Your supported OpenGL version:\n" + "1.1: " + c.OpenGL11 + "\n" + - "1.2: " + c.OpenGL12 + "\n" + - "1.3: " + c.OpenGL13 + "\n" + - "1.4: " + c.OpenGL14 + "\n" + - "1.5: " + c.OpenGL15 + "\n" + - "2.0: " + c.OpenGL20 + "\n" + - "2.1: " + c.OpenGL21 + "\n" + - "3.0: " + c.OpenGL30 + "\n" + - "3.1: " + c.OpenGL31 + "\n" + - "3.2: " + c.OpenGL32 + " <- REQUIRED\n" + - "3.3: " + c.OpenGL33 + "\n" + - "4.0: " + c.OpenGL40 + "\n" + - "4.1: " + c.OpenGL41 + "\n" + - "4.2: " + c.OpenGL42 + "\n" + - "4.3: " + c.OpenGL43 + " <- optional improvement\n" + - "4.4: " + c.OpenGL44 + " <- optional improvement\n" + - "4.5: " + c.OpenGL45 + "\n" + - "4.6: " + c.OpenGL46 + "\n" + - "If you noticed that your computer supports higher OpenGL versions" + str.append("1.1: "+c.OpenGL11+"\n"); + str.append("1.2: "+c.OpenGL12+"\n"); + str.append("1.3: "+c.OpenGL13+"\n"); + str.append("1.4: "+c.OpenGL14+"\n"); + str.append("1.5: "+c.OpenGL15+"\n"); + str.append("2.0: "+c.OpenGL20+"\n"); + str.append("2.1: "+c.OpenGL21+"\n"); + str.append("3.0: "+c.OpenGL30+"\n"); + str.append("3.1: "+c.OpenGL31+"\n"); + str.append("3.2: "+c.OpenGL32+" <- REQUIRED\n"); + str.append("3.3: "+c.OpenGL33+"\n"); + str.append("4.0: "+c.OpenGL40+"\n"); + str.append("4.1: "+c.OpenGL41+"\n"); + str.append("4.2: "+c.OpenGL42+"\n"); + str.append("4.3: "+c.OpenGL43+" <- optional improvement\n"); + str.append("4.4: "+c.OpenGL44+" <- optional improvement\n"); + str.append("4.5: "+c.OpenGL45+"\n"); + str.append("4.6: "+c.OpenGL46+"\n"); + + str.append("If you noticed that your computer supports higher OpenGL versions" + " but not the required version, try running the game in compatibility mode." - + " (How you turn that on, I have no clue~)"; + + " (How you turn that on, I have no clue~)"); + return str.toString(); } private String getVersionInfo(GLCapabilities c) { + StringBuilder str = new StringBuilder("Your supported OpenGL version:\n"); - return "Your supported OpenGL version:\n" + "1.1: " + c.OpenGL11 + "\n" + - "1.2: " + c.OpenGL12 + "\n" + - "1.3: " + c.OpenGL13 + "\n" + - "1.4: " + c.OpenGL14 + "\n" + - "1.5: " + c.OpenGL15 + "\n" + - "2.0: " + c.OpenGL20 + "\n" + - "2.1: " + c.OpenGL21 + "\n" + - "3.0: " + c.OpenGL30 + "\n" + - "3.1: " + c.OpenGL31 + "\n" + - "3.2: " + c.OpenGL32 + " <- REQUIRED\n" + - "3.3: " + c.OpenGL33 + "\n" + - "4.0: " + c.OpenGL40 + "\n" + - "4.1: " + c.OpenGL41 + "\n" + - "4.2: " + c.OpenGL42 + "\n" + - "4.3: " + c.OpenGL43 + " <- optional improvement\n" + - "4.4: " + c.OpenGL44 + " <- optional improvement\n" + - "4.5: " + c.OpenGL45 + "\n" + - "4.6: " + c.OpenGL46 + "\n"; + str.append("1.1: "+c.OpenGL11+"\n"); + str.append("1.2: "+c.OpenGL12+"\n"); + str.append("1.3: "+c.OpenGL13+"\n"); + str.append("1.4: "+c.OpenGL14+"\n"); + str.append("1.5: "+c.OpenGL15+"\n"); + str.append("2.0: "+c.OpenGL20+"\n"); + str.append("2.1: "+c.OpenGL21+"\n"); + str.append("3.0: "+c.OpenGL30+"\n"); + str.append("3.1: "+c.OpenGL31+"\n"); + str.append("3.2: "+c.OpenGL32+" <- REQUIRED\n"); + str.append("3.3: "+c.OpenGL33+"\n"); + str.append("4.0: "+c.OpenGL40+"\n"); + str.append("4.1: "+c.OpenGL41+"\n"); + str.append("4.2: "+c.OpenGL42+"\n"); + str.append("4.3: "+c.OpenGL43+" <- optional improvement\n"); + str.append("4.4: "+c.OpenGL44+" <- optional improvement\n"); + str.append("4.5: "+c.OpenGL45+"\n"); + str.append("4.6: "+c.OpenGL46+"\n"); + return str.toString(); } diff --git a/src/main/java/com/seibel/lod/core/render/LodFogConfig.java b/src/main/java/com/seibel/lod/core/render/LodFogConfig.java index 3684f068b..7c2d2abe1 100644 --- a/src/main/java/com/seibel/lod/core/render/LodFogConfig.java +++ b/src/main/java/com/seibel/lod/core/render/LodFogConfig.java @@ -34,7 +34,7 @@ import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; public class LodFogConfig { public FogDrawMode fogDrawMode; - public final FogDistance fogDistance; + public FogDistance fogDistance; public float nearFogStart = 0; public float nearFogEnd = 0; diff --git a/src/main/java/com/seibel/lod/core/render/LodRenderer.java b/src/main/java/com/seibel/lod/core/render/LodRenderer.java index 09c0258c9..48b3bb574 100644 --- a/src/main/java/com/seibel/lod/core/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/core/render/LodRenderer.java @@ -39,6 +39,7 @@ import com.seibel.lod.core.objects.math.Vec3f; import com.seibel.lod.core.objects.opengl.LodVertexBuffer; import com.seibel.lod.core.render.objects.LightmapTexture; import com.seibel.lod.core.util.DetailDistanceUtil; +import com.seibel.lod.core.util.GridList; import com.seibel.lod.core.util.LodUtil; import com.seibel.lod.core.util.MovableGridList; import com.seibel.lod.core.util.SingletonHandler; @@ -404,8 +405,10 @@ public class LodRenderer // accuracy vs the model view matrix, which only uses floats) //int bufferPosX = LevelPosUtil.convert(LodUtil.CHUNK_DETAIL_LEVEL, vbosCenterX, LodUtil.BLOCK_DETAIL_LEVEL); //int bufferPosZ = LevelPosUtil.convert(LodUtil.CHUNK_DETAIL_LEVEL, vbosCenterZ, LodUtil.BLOCK_DETAIL_LEVEL); - double xDiff = projectedView.x - vbosCenterX; - double zDiff = projectedView.z - vbosCenterZ; + int bufferPosX = vbosCenterX; + int bufferPosZ = vbosCenterZ; + double xDiff = projectedView.x - bufferPosX; + double zDiff = projectedView.z - bufferPosZ; mcModelViewMatrix.multiplyTranslationMatrix(-xDiff, -projectedView.y, -zDiff); return mcModelViewMatrix; @@ -419,8 +422,10 @@ public class LodRenderer { //int worldCenterX = LevelPosUtil.convert(LodUtil.CHUNK_DETAIL_LEVEL, vbosCenterX, LodUtil.BLOCK_DETAIL_LEVEL); //int worldCenterZ = LevelPosUtil.convert(LodUtil.CHUNK_DETAIL_LEVEL, vbosCenterZ, LodUtil.BLOCK_DETAIL_LEVEL); + int worldCenterX = vbosCenterX; + int worldCenterZ = vbosCenterZ; Vec3d cameraPos = MC_RENDER.getCameraExactPosition(); - return new Vec3f((float)cameraPos.x - vbosCenterX, (float)cameraPos.y, (float)cameraPos.z - vbosCenterZ); + return new Vec3f((float)cameraPos.x - worldCenterX, (float)cameraPos.y, (float)cameraPos.z - worldCenterZ); } /** diff --git a/src/main/java/com/seibel/lod/core/render/objects/VertexAttributePreGL43.java b/src/main/java/com/seibel/lod/core/render/objects/VertexAttributePreGL43.java index ebc1820cc..65a7e9c89 100644 --- a/src/main/java/com/seibel/lod/core/render/objects/VertexAttributePreGL43.java +++ b/src/main/java/com/seibel/lod/core/render/objects/VertexAttributePreGL43.java @@ -48,16 +48,14 @@ public final class VertexAttributePreGL43 extends VertexAttribute { public void bindBufferToBindingPoint(int buffer, int bindingPoint) { int[] toBind = bindingPointsToIndex[bindingPoint]; - for (int j : toBind) - GL32.glEnableVertexAttribArray(j); + for (int i=0; i { - if (v!= valueToBeFlipped) return v; + if (v!=t) return v; boolean r = false; - r |= (isInBound(x - 1, y) && get(x - 1, y) == !valueToBeFlipped); - r |= (isInBound(x, y - 1) && get(x, y - 1) == !valueToBeFlipped); - r |= (isInBound(x + 1, y) && get(x + 1, y) == !valueToBeFlipped); - r |= (isInBound(x, y + 1) && get(x, y + 1) == !valueToBeFlipped); - return r != valueToBeFlipped; + r |= (isInBound(x-1,y) ? get(x-1,y)==!t : false); + r |= (isInBound(x,y-1) ? get(x,y-1)==!t : false); + r |= (isInBound(x+1,y) ? get(x+1,y)==!t : false); + r |= (isInBound(x,y+1) ? get(x,y+1)==!t : false); + return r ? !t : t; }; twoStageTransform(tran); } public void flipBorderCorner(boolean valueToBeFlipped) { + boolean t = valueToBeFlipped; BoolTransformer tran = (v, x, y) -> { - if (v!= valueToBeFlipped) return v; + if (v!=t) return v; boolean r = false; - r |= (isInBound(x - 1, y) && get(x - 1, y) == !valueToBeFlipped); - r |= (isInBound(x, y - 1) && get(x, y - 1) == !valueToBeFlipped); - r |= (isInBound(x + 1, y) && get(x + 1, y) == !valueToBeFlipped); - r |= (isInBound(x, y + 1) && get(x, y + 1) == !valueToBeFlipped); - r |= (isInBound(x - 1, y - 1) && get(x - 1, y - 1) == !valueToBeFlipped); - r |= (isInBound(x + 1, y - 1) && get(x + 1, y - 1) == !valueToBeFlipped); - r |= (isInBound(x + 1, y + 1) && get(x + 1, y + 1) == !valueToBeFlipped); - r |= (isInBound(x - 1, y + 1) && get(x - 1, y + 1) == !valueToBeFlipped); - return r != valueToBeFlipped; + r |= (isInBound(x-1,y) ? get(x-1,y)==!t : false); + r |= (isInBound(x,y-1) ? get(x,y-1)==!t : false); + r |= (isInBound(x+1,y) ? get(x+1,y)==!t : false); + r |= (isInBound(x,y+1) ? get(x,y+1)==!t : false); + r |= (isInBound(x-1,y-1) ? get(x-1,y-1)==!t : false); + r |= (isInBound(x+1,y-1) ? get(x+1,y-1)==!t : false); + r |= (isInBound(x+1,y+1) ? get(x+1,y+1)==!t : false); + r |= (isInBound(x-1,y+1) ? get(x-1,y+1)==!t : false); + return r ? !t : t; }; twoStageTransform(tran); } public void flipBorderCorner(boolean valueToBeFlipped, int range) { + boolean t = valueToBeFlipped; BoolTransformer tran = (v, x, y) -> { - if (v!= valueToBeFlipped) return v; + if (v!=t) return v; boolean r = false; for (int dx=-range;dx<=range;dx++) for (int dy=-range;dy<=range;dy++) - r |= (isInBound(x + dx, y + dy) && get(x + dx, y + dy) == !valueToBeFlipped); - return r != valueToBeFlipped; + r |= (isInBound(x+dx,y+dy) ? get(x+dx,y+dy)==!t : false); + return r ? !t : t; }; twoStageTransform(tran); } @@ -229,17 +232,16 @@ public class BooleanMovableGridList { public String toDetailString() { StringBuilder str = new StringBuilder("\n"); int i = 0; - str.append(this); + str.append(toString()); str.append("\n"); for (boolean t : b) { str.append(t ? "#" : "."); i++; if (i % gridSize == 0) { str.append("\n"); + } else { + //str.append(", "); } - //else { - // str.append(", "); - //} } return str.toString(); } diff --git a/src/main/java/com/seibel/lod/core/util/DataPointUtil.java b/src/main/java/com/seibel/lod/core/util/DataPointUtil.java index bb871863e..2a28766a2 100644 --- a/src/main/java/com/seibel/lod/core/util/DataPointUtil.java +++ b/src/main/java/com/seibel/lod/core/util/DataPointUtil.java @@ -19,6 +19,8 @@ package com.seibel.lod.core.util; +import static com.seibel.lod.core.builders.bufferBuilding.LodBufferBuilderFactory.skyLightPlayer; + import com.seibel.lod.core.enums.config.DistanceGenerationMode; @@ -143,8 +145,8 @@ public class DataPointUtil } public static long shiftHeightAndDepth(long dataPoint, short offset) { - long height = (dataPoint + ((long) offset << HEIGHT_SHIFT)) & HEIGHT_SHIFTED_MASK; - long depth = (dataPoint + ((long) offset << DEPTH_SHIFT)) & DEPTH_SHIFTED_MASK; + long height = (dataPoint + (offset << HEIGHT_SHIFT)) & HEIGHT_SHIFTED_MASK; + long depth = (dataPoint + (offset << DEPTH_SHIFT)) & DEPTH_SHIFTED_MASK; return dataPoint & ~(HEIGHT_SHIFTED_MASK | DEPTH_SHIFTED_MASK) | height | depth; } @@ -264,8 +266,8 @@ public class DataPointUtil if (dataB!=0) dataB = Integer.MAX_VALUE; return (int)(dataA-dataB); } - int genA = getGenerationMode(dataA); - int genB = getGenerationMode(dataB); + int genA = (int)getGenerationMode(dataA); + int genB = (int)getGenerationMode(dataB); return genA-genB; } diff --git a/src/main/java/com/seibel/lod/core/util/GridList.java b/src/main/java/com/seibel/lod/core/util/GridList.java index feca26860..8517aef2c 100644 --- a/src/main/java/com/seibel/lod/core/util/GridList.java +++ b/src/main/java/com/seibel/lod/core/util/GridList.java @@ -6,8 +6,8 @@ import java.util.List; public class GridList extends ArrayList implements List { public static class Pos { - public final int x; - public final int y; + public int x; + public int y; public Pos(int xx, int yy) { x = xx; diff --git a/src/main/java/com/seibel/lod/core/util/MovableGridList.java b/src/main/java/com/seibel/lod/core/util/MovableGridList.java index 2c5264c08..79d6093f2 100644 --- a/src/main/java/com/seibel/lod/core/util/MovableGridList.java +++ b/src/main/java/com/seibel/lod/core/util/MovableGridList.java @@ -15,8 +15,8 @@ public class MovableGridList extends ArrayList implements List { private static final long serialVersionUID = 5366261085254591277L; public static class Pos { - public final int x; - public final int y; + public int x; + public int y; public Pos(int xx, int yy) { x = xx; @@ -94,16 +94,16 @@ public class MovableGridList extends ArrayList implements List { return (x>=0 && x=0 && y=gridSize || y<0 || y>=gridSize) return null; return super.get(x + y * gridSize); } - private boolean _setDirect(int x, int y, T t) { + private final boolean _setDirect(int x, int y, T t) { if (x<0 || x>=gridSize || y<0 || y>=gridSize) return false; super.set(x + y * gridSize, t); return true; } - private T _swapDirect(int x, int y, T t) { + private final T _swapDirect(int x, int y, T t) { if (x<0 || x>=gridSize || y<0 || y>=gridSize) return null; return super.set(x + y * gridSize, t); } @@ -266,7 +266,7 @@ public class MovableGridList extends ArrayList implements List { public String toDetailString() { StringBuilder str = new StringBuilder("\n"); int i = 0; - str.append(this); + str.append(toString()); str.append("\n"); for (T t : this) { diff --git a/src/main/java/com/seibel/lod/core/wrapperInterfaces/IWrapperFactory.java b/src/main/java/com/seibel/lod/core/wrapperInterfaces/IWrapperFactory.java index 13c376d3f..a7cb2c4f0 100644 --- a/src/main/java/com/seibel/lod/core/wrapperInterfaces/IWrapperFactory.java +++ b/src/main/java/com/seibel/lod/core/wrapperInterfaces/IWrapperFactory.java @@ -48,7 +48,7 @@ public interface IWrapperFactory AbstractWorldGeneratorWrapper createWorldGenerator(LodBuilder newLodBuilder, LodDimension newLodDimension, IWorldWrapper worldWrapper); // Return null to signal that there is no AbstractWorldGenerator - default AbstractExperimentalWorldGeneratorWrapper createExperimentalWorldGenerator(LodBuilder newLodBuilder, LodDimension newLodDimension, IWorldWrapper worldWrapper) { + public default AbstractExperimentalWorldGeneratorWrapper createExperimentalWorldGenerator(LodBuilder newLodBuilder, LodDimension newLodDimension, IWorldWrapper worldWrapper) { return null; } } diff --git a/src/main/java/com/seibel/lod/core/wrapperInterfaces/chunk/IChunkWrapper.java b/src/main/java/com/seibel/lod/core/wrapperInterfaces/chunk/IChunkWrapper.java index e579e1667..a53bd2def 100644 --- a/src/main/java/com/seibel/lod/core/wrapperInterfaces/chunk/IChunkWrapper.java +++ b/src/main/java/com/seibel/lod/core/wrapperInterfaces/chunk/IChunkWrapper.java @@ -19,6 +19,7 @@ package com.seibel.lod.core.wrapperInterfaces.chunk; +import com.seibel.lod.core.wrapperInterfaces.block.AbstractBlockPosWrapper; import com.seibel.lod.core.wrapperInterfaces.block.IBlockColorWrapper; import com.seibel.lod.core.wrapperInterfaces.block.IBlockShapeWrapper; import com.seibel.lod.core.wrapperInterfaces.world.IBiomeWrapper; diff --git a/src/main/java/com/seibel/lod/core/wrapperInterfaces/config/ILodConfigWrapperSingleton.java b/src/main/java/com/seibel/lod/core/wrapperInterfaces/config/ILodConfigWrapperSingleton.java index 64e8f8b87..00da18d5c 100644 --- a/src/main/java/com/seibel/lod/core/wrapperInterfaces/config/ILodConfigWrapperSingleton.java +++ b/src/main/java/com/seibel/lod/core/wrapperInterfaces/config/ILodConfigWrapperSingleton.java @@ -345,7 +345,7 @@ public interface ILodConfigWrapperSingleton void setGenerationPriority(GenerationPriority newGenerationPriority); DistanceGenerationMode DISTANCE_GENERATION_MODE_DEFAULT = DistanceGenerationMode.SURFACE; - static String getDistanceGenerationModeDesc(IVersionConstants versionConstants) + public static String getDistanceGenerationModeDesc(IVersionConstants versionConstants) { return "" + " How detailed should fake chunks be generated outside the vanilla render distance? \n" @@ -437,7 +437,7 @@ public interface ILodConfigWrapperSingleton static String multiOrSingleThreadText(IVersionConstants versionConstants, DistanceGenerationMode distanceGenerationMode) { return versionConstants.isWorldGeneratorSingleThreaded(distanceGenerationMode) ? "Singlethreaded" : "Multithreaded"; - } + }; } diff --git a/src/main/java/com/seibel/lod/core/wrapperInterfaces/minecraft/IMinecraftRenderWrapper.java b/src/main/java/com/seibel/lod/core/wrapperInterfaces/minecraft/IMinecraftRenderWrapper.java index 01bb39158..3d4ed437e 100644 --- a/src/main/java/com/seibel/lod/core/wrapperInterfaces/minecraft/IMinecraftRenderWrapper.java +++ b/src/main/java/com/seibel/lod/core/wrapperInterfaces/minecraft/IMinecraftRenderWrapper.java @@ -55,9 +55,9 @@ public interface IMinecraftRenderWrapper Color getFogColor(float partialTicks); - default Color getUnderWaterFogColor(float partialTicks) {return getFogColor(partialTicks);} + public default Color getUnderWaterFogColor(float partialTicks) {return getFogColor(partialTicks);} - default boolean isFogStateInUnderWater() { + public default boolean isFogStateInUnderWater() { return false; } @@ -77,7 +77,7 @@ public interface IMinecraftRenderWrapper *
* If not implemented this calls {@link #getMaximumRenderedChunks()}. */ - default HashSet getVanillaRenderedChunks() + public default HashSet getVanillaRenderedChunks() { ISodiumAccessor sodium = ModAccessorApi.get(ISodiumAccessor.class); return sodium==null ? getMaximumRenderedChunks() : sodium.getNormalRenderedChunks(); @@ -87,7 +87,7 @@ public interface IMinecraftRenderWrapper * Doesn't need to be implemented.
* Returns every chunk position within the vanilla render distance. */ - default HashSet getMaximumRenderedChunks() + public default HashSet getMaximumRenderedChunks() { IMinecraftWrapper mcWrapper = SingletonHandler.get(IMinecraftWrapper.class); IWrapperFactory factory = SingletonHandler.get(IWrapperFactory.class); @@ -119,9 +119,9 @@ public interface IMinecraftRenderWrapper /** @returns -1 if there was an issue getting the lightmap */ int getLightmapTextureWidth(); /** @returns -1 if there was an issue getting the lightmap */ - int getLightmapGLFormat(); + public int getLightmapGLFormat(); // Try and disable vanilla fog. Return true if successful, or false if not able to. - boolean tryDisableVanillaFog(); + public boolean tryDisableVanillaFog(); } diff --git a/src/main/java/com/seibel/lod/core/wrapperInterfaces/modAccessor/IModAccessor.java b/src/main/java/com/seibel/lod/core/wrapperInterfaces/modAccessor/IModAccessor.java index 0cba75bf0..dbf0b878e 100644 --- a/src/main/java/com/seibel/lod/core/wrapperInterfaces/modAccessor/IModAccessor.java +++ b/src/main/java/com/seibel/lod/core/wrapperInterfaces/modAccessor/IModAccessor.java @@ -1,5 +1,5 @@ package com.seibel.lod.core.wrapperInterfaces.modAccessor; -public interface IModAccessor { +public abstract interface IModAccessor { String getModName(); } diff --git a/src/main/java/com/seibel/lod/core/wrapperInterfaces/world/IWorldWrapper.java b/src/main/java/com/seibel/lod/core/wrapperInterfaces/world/IWorldWrapper.java index b9a92f822..6726d1a56 100644 --- a/src/main/java/com/seibel/lod/core/wrapperInterfaces/world/IWorldWrapper.java +++ b/src/main/java/com/seibel/lod/core/wrapperInterfaces/world/IWorldWrapper.java @@ -22,6 +22,7 @@ package com.seibel.lod.core.wrapperInterfaces.world; import java.io.File; import com.seibel.lod.core.enums.WorldType; +import com.seibel.lod.core.wrapperInterfaces.block.AbstractBlockPosWrapper; import com.seibel.lod.core.wrapperInterfaces.chunk.AbstractChunkPosWrapper; import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper;