From cd20fb1e345f0661af0b9e9b3bb242c04ba8cf18 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 13 Feb 2024 07:53:01 -0600 Subject: [PATCH 1/8] Temp fix for near clip plane going too far in some cases --- .../core/render/renderer/LodRenderProgram.java | 4 ++++ .../com/seibel/distanthorizons/core/util/RenderUtil.java | 6 ------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderProgram.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderProgram.java index 255653c6a..d044b149d 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderProgram.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderProgram.java @@ -187,6 +187,10 @@ public class LodRenderProgram extends ShaderProgram implements IDhApiShaderProgr // Clip Uniform float dhNearClipDistance = RenderUtil.getNearClipPlaneDistanceInBlocks(renderParameters.partialTicks); + // TODO a different multiplier might be necessary + // this is to try and allow the fragment culling to go farther than the near clip plane. + // Currently this only works for certain FOV/screen ratio combos. + dhNearClipDistance *= 2.0f; setUniform(clipDistanceUniform, dhNearClipDistance); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/util/RenderUtil.java b/core/src/main/java/com/seibel/distanthorizons/core/util/RenderUtil.java index 4f4352643..0177d327c 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/util/RenderUtil.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/util/RenderUtil.java @@ -186,13 +186,7 @@ public class RenderUtil public static float getNearClipPlaneDistanceInBlocks(float partialTicks) { int chunkRenderDistance = MC_RENDER.getRenderDistance(); - if (chunkRenderDistance % 2 == 0) - { - chunkRenderDistance += 1; - } - int vanillaBlockRenderedDistance = chunkRenderDistance * LodUtil.CHUNK_WIDTH; - vanillaBlockRenderedDistance *= 2; float nearClipPlane; if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) From 6fcdde8a9f6dcbe7185e2a21ae694d3b8e69b481 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 15 Feb 2024 20:36:34 -0600 Subject: [PATCH 2/8] Fix fog rendering --- .../distanthorizons/core/render/renderer/LodRenderer.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java index 6f2148976..bd3e4eea1 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/LodRenderer.java @@ -392,7 +392,11 @@ public class LodRenderer if (Config.Client.Advanced.Graphics.Fog.drawMode.get() != EFogDrawMode.FOG_DISABLED) { profiler.popPush("LOD Fog"); - FogShader.INSTANCE.setModelViewProjectionMatrix(renderEventParam.dhModelViewMatrix); + + Mat4f combinedMatrix = new Mat4f(renderEventParam.dhProjectionMatrix); + combinedMatrix.multiply(renderEventParam.dhModelViewMatrix); + + FogShader.INSTANCE.setModelViewProjectionMatrix(combinedMatrix); FogShader.INSTANCE.render(renderEventParam.partialTicks); } From f37ed0cccf3c3a60630b8263392fcb6d32f57fb7 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 15 Feb 2024 21:54:21 -0600 Subject: [PATCH 3/8] Revert Fog near end/far start distance to pre-RenderUtil fix --- .../distanthorizons/core/render/renderer/shaders/FogShader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/FogShader.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/FogShader.java index f9725c10b..2d5a3491c 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/FogShader.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/FogShader.java @@ -96,7 +96,7 @@ public class FogShader extends AbstractShaderRenderer { this.shader.setUniform(this.gInvertedModelViewProjectionUniform, this.inverseMvmProjMatrix); - int lodDrawDistance = RenderUtil.getFarClipPlaneDistanceInBlocks(); + int lodDrawDistance = Config.Client.Advanced.Graphics.Quality.lodChunkRenderDistanceRadius.get() * LodUtil.CHUNK_WIDTH; int vanillaDrawDistance = MC_RENDER.getRenderDistance() * LodUtil.CHUNK_WIDTH; vanillaDrawDistance += LodUtil.CHUNK_WIDTH * 2; // Give it a 2 chunk boundary for near fog. From 7826d756d0a882eedfb033882ade06aaf4cbf7ab Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 15 Feb 2024 21:59:21 -0600 Subject: [PATCH 4/8] Add stackoverflow source link to RenderUtil.getNearClipPlaneDistanceInBlocks() --- .../java/com/seibel/distanthorizons/core/util/RenderUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/util/RenderUtil.java b/core/src/main/java/com/seibel/distanthorizons/core/util/RenderUtil.java index 0177d327c..0ea8414ca 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/util/RenderUtil.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/util/RenderUtil.java @@ -214,6 +214,7 @@ public class RenderUtil double fov = MC_RENDER.getFov(partialTicks); double aspectRatio = (double) MC_RENDER.getScreenWidth() / MC_RENDER.getScreenHeight(); + // source: https://stackoverflow.com/questions/8101119/how-do-i-methodically-choose-the-near-clip-plane-distance-for-a-perspective-proj/8101234#8101234 return (float) (nearClipPlane / Math.sqrt(1d + MathUtil.pow2(Math.tan(fov / 180d * Math.PI / 2d)) * (MathUtil.pow2(aspectRatio) + 1d))); From 045c9f46d2cb623612428ca7e9e76f0e428cf188 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 17 Feb 2024 22:27:23 -0600 Subject: [PATCH 5/8] Add resource (sql script) validation in Initializer.java --- .../distanthorizons/core/Initializer.java | 18 ++++++++++++++++++ .../core/sql/DatabaseUpdater.java | 12 ++++++++++++ 2 files changed, 30 insertions(+) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/Initializer.java b/core/src/main/java/com/seibel/distanthorizons/core/Initializer.java index 590f08bc7..e74d7bedd 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/Initializer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/Initializer.java @@ -20,6 +20,7 @@ package com.seibel.distanthorizons.core; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; +import com.seibel.distanthorizons.core.sql.DatabaseUpdater; import com.seibel.distanthorizons.core.wrapperInterfaces.IWrapperFactory; import com.seibel.distanthorizons.coreapi.ModInfo; import com.seibel.distanthorizons.core.world.DhApiWorldProxy; @@ -35,6 +36,8 @@ import net.jpountz.lz4.LZ4Compressor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.io.InputStream; + /** Handles first time Core setup. */ public class Initializer { @@ -57,6 +60,21 @@ public class Initializer throw e; } + // confirm the resource directory is present + try + { + int scriptCount = DatabaseUpdater.getAutoUpdateScriptCount(); + if (scriptCount == 0) + { + throw new NullPointerException("No auto update scripts found, but no error thrown. This might mean the script list file is corrupted or empty."); + } + } + catch (Exception e) + { + LOGGER.fatal("Critical programmer error: Can't read SQL Scripts resource folder is either missing or malformed. Error: [" + e.getMessage() + "]."); + throw new RuntimeException(e); + } + CompleteFullDataSourceLoader unused2 = new CompleteFullDataSourceLoader(); // Auto register into the loader system diff --git a/core/src/main/java/com/seibel/distanthorizons/core/sql/DatabaseUpdater.java b/core/src/main/java/com/seibel/distanthorizons/core/sql/DatabaseUpdater.java index 131fb92a8..d41c3cdc1 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/sql/DatabaseUpdater.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/sql/DatabaseUpdater.java @@ -222,6 +222,18 @@ public class DatabaseUpdater + //====================// + // startup validation // + //====================// + + /** + * Can be used to confirm the auto update scripts are in their expected folder. + * Will throw an exception if the scripts are missing or malformed. + */ + public static int getAutoUpdateScriptCount() throws NullPointerException, IOException { return getAutoUpdateScripts().size(); } + + + //================// // helper classes // //================// From 87e56473791c56bea97834ae27b5a588db354caa Mon Sep 17 00:00:00 2001 From: coolGi Date: Sun, 18 Feb 2024 19:02:56 +1030 Subject: [PATCH 6/8] Refactored logos into assets/distanthorizons --- .../distanthorizons/core/jar/gui/BaseJFrame.java | 5 ++--- .../resources/{ => assets/distanthorizons}/icon.png | Bin .../resources/{ => assets/distanthorizons}/icon.svg | 0 .../{ => assets/distanthorizons}/iconLegacy.svg | 0 .../resources/{ => assets/distanthorizons}/logo.png | Bin 5 files changed, 2 insertions(+), 3 deletions(-) rename core/src/main/resources/{ => assets/distanthorizons}/icon.png (100%) rename core/src/main/resources/{ => assets/distanthorizons}/icon.svg (100%) rename core/src/main/resources/{ => assets/distanthorizons}/iconLegacy.svg (100%) rename core/src/main/resources/{ => assets/distanthorizons}/logo.png (100%) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/jar/gui/BaseJFrame.java b/core/src/main/java/com/seibel/distanthorizons/core/jar/gui/BaseJFrame.java index 023ada081..25c2908de 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/jar/gui/BaseJFrame.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/jar/gui/BaseJFrame.java @@ -29,7 +29,6 @@ import java.awt.*; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.InputStreamReader; -import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.List; @@ -58,7 +57,7 @@ public class BaseJFrame extends JFrame setTitle(SingletonInjector.INSTANCE.get(ILangWrapper.class).getLang("lod.title")); try { - setIconImage(ImageIO.read(JarUtils.accessFile("icon.png"))); + setIconImage(ImageIO.read(JarUtils.accessFile("assets/distanthorizons/icon.png"))); } catch (Exception e) { @@ -165,7 +164,7 @@ public class BaseJFrame extends JFrame super.paintComponent(g); try { - BufferedImage image = ImageIO.read(JarUtils.accessFile("logo.png")); + BufferedImage image = ImageIO.read(JarUtils.accessFile("assets/distanthorizons/logo.png")); int logoWidth = (int) ((double) logoHeight * ((double) image.getWidth() / (double) image.getHeight())); // Calculate the aspect ratio and set the height correctly to not stretch it g.drawImage(image, (getWidth() / 2) - (logoWidth / 2), 0, logoWidth, logoHeight, this); // Resize image and draw it } diff --git a/core/src/main/resources/icon.png b/core/src/main/resources/assets/distanthorizons/icon.png similarity index 100% rename from core/src/main/resources/icon.png rename to core/src/main/resources/assets/distanthorizons/icon.png diff --git a/core/src/main/resources/icon.svg b/core/src/main/resources/assets/distanthorizons/icon.svg similarity index 100% rename from core/src/main/resources/icon.svg rename to core/src/main/resources/assets/distanthorizons/icon.svg diff --git a/core/src/main/resources/iconLegacy.svg b/core/src/main/resources/assets/distanthorizons/iconLegacy.svg similarity index 100% rename from core/src/main/resources/iconLegacy.svg rename to core/src/main/resources/assets/distanthorizons/iconLegacy.svg diff --git a/core/src/main/resources/logo.png b/core/src/main/resources/assets/distanthorizons/logo.png similarity index 100% rename from core/src/main/resources/logo.png rename to core/src/main/resources/assets/distanthorizons/logo.png From a44469eac4f04ea4a5887f0d3933c0d8b0f3ac7f Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 20 Feb 2024 07:42:46 -0600 Subject: [PATCH 7/8] Add a temporary debug renderer to FullDataFileHandler for unsaved positions --- .../fullDatafile/FullDataFileHandler.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/FullDataFileHandler.java b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/FullDataFileHandler.java index 8f89ab2a5..77610a252 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/FullDataFileHandler.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/FullDataFileHandler.java @@ -31,6 +31,7 @@ import com.seibel.distanthorizons.core.level.IDhLevel; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.core.render.renderer.DebugRenderer; +import com.seibel.distanthorizons.core.render.renderer.IDebugRenderable; import com.seibel.distanthorizons.core.sql.AbstractDataSourceRepo; import com.seibel.distanthorizons.core.sql.FullDataRepo; import com.seibel.distanthorizons.core.sql.DataSourceDto; @@ -43,7 +44,9 @@ import java.io.IOException; import java.sql.SQLException; import java.util.*; -public class FullDataFileHandler extends AbstractDataSourceHandler implements IFullDataSourceProvider +public class FullDataFileHandler + extends AbstractDataSourceHandler + implements IFullDataSourceProvider, IDebugRenderable { private static final Logger LOGGER = DhLoggerBuilder.getLogger(); @@ -54,7 +57,12 @@ public class FullDataFileHandler extends AbstractDataSourceHandler { renderer.renderBox(new DebugRenderer.Box(pos, -32f, 128f, 0.15f, Color.cyan)); }); + + } + + } From 9b466133557289324e0647301cc94bd98ac3e2a7 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 22 Feb 2024 07:05:07 -0600 Subject: [PATCH 8/8] temporary multiverse null pointer fix --- .../core/render/RenderBufferHandler.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/RenderBufferHandler.java b/core/src/main/java/com/seibel/distanthorizons/core/render/RenderBufferHandler.java index 8fb1da7a4..a66d3c028 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/RenderBufferHandler.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/RenderBufferHandler.java @@ -385,15 +385,23 @@ public class RenderBufferHandler implements AutoCloseable public void renderOpaque(LodRenderer renderContext, DhApiRenderParam renderEventParam) { - this.loadedNearToFarBuffers.forEach(loadedBuffer -> loadedBuffer.buffer.renderOpaque(renderContext, renderEventParam)); + // TODO why can these sometimes be null when teleporting between multiverses + if (this.loadedNearToFarBuffers != null) + { + this.loadedNearToFarBuffers.forEach(loadedBuffer -> loadedBuffer.buffer.renderOpaque(renderContext, renderEventParam)); + } } public void renderTransparent(LodRenderer renderContext, DhApiRenderParam renderEventParam) { - ListIterator iter = this.loadedNearToFarBuffers.listIterator(this.loadedNearToFarBuffers.size()); - while (iter.hasPrevious()) + // TODO why can these sometimes be null when teleporting between multiverses + if (this.loadedNearToFarBuffers != null) { - LoadedRenderBuffer loadedBuffer = iter.previous(); - loadedBuffer.buffer.renderTransparent(renderContext, renderEventParam); + ListIterator iter = this.loadedNearToFarBuffers.listIterator(this.loadedNearToFarBuffers.size()); + while (iter.hasPrevious()) + { + LoadedRenderBuffer loadedBuffer = iter.previous(); + loadedBuffer.buffer.renderTransparent(renderContext, renderEventParam); + } } }