From b3a09a12fa8149752e03472717a9fe4b5d3eb369 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Fri, 3 Nov 2023 17:51:16 -0500 Subject: [PATCH 01/10] fix null pointer in ThreadPools shutdown --- .../distanthorizons/core/util/threading/ThreadPools.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/util/threading/ThreadPools.java b/core/src/main/java/com/seibel/distanthorizons/core/util/threading/ThreadPools.java index f5899ac4e..535ade292 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/util/threading/ThreadPools.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/util/threading/ThreadPools.java @@ -141,9 +141,12 @@ public class ThreadPools ThreadPools.bufferBuilderThreadPool.shutdownExecutorService(); workerThreadSemaphore = null; - workerThreadSemaphoreConfigListener.close(); - workerThreadSemaphoreConfigListener = null; + if (workerThreadSemaphoreConfigListener != null) + { + workerThreadSemaphoreConfigListener.close(); + workerThreadSemaphoreConfigListener = null; + } } } From 4b8f27ed78c4440d4cc76b66433d4deb30bfdaa0 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Fri, 3 Nov 2023 19:42:47 -0500 Subject: [PATCH 02/10] Add invalid fullData ID handling --- .../fullData/FullDataPointIdMap.java | 18 ++++++++--- .../SingleColumnFullDataAccessor.java | 3 +- .../FullDataToRenderDataTransformer.java | 31 ++++++++++++++----- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/FullDataPointIdMap.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/FullDataPointIdMap.java index ced5f7e5d..b276882b0 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/FullDataPointIdMap.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/FullDataPointIdMap.java @@ -80,7 +80,8 @@ public class FullDataPointIdMap // getters // //=========// - private Entry getEntry(int id) + /** @throws IndexOutOfBoundsException if the given ID isn't in the {@link FullDataPointIdMap#entryList} */ + private Entry getEntry(int id) throws IndexOutOfBoundsException { try { @@ -92,8 +93,7 @@ public class FullDataPointIdMap } catch (IndexOutOfBoundsException e) { - LOGGER.error("FullData ID Map out of sync for pos: " + this.pos + ". ID: [" + id + "] greater than the number of known ID's: [" + this.entryList.size() + "]."); - throw e; + throw new IndexOutOfBoundsException("FullData ID Map out of sync for pos: "+this.pos+". ID: ["+id+"] greater than the number of known ID's: ["+this.entryList.size()+"]."); } return entry; @@ -104,8 +104,16 @@ public class FullDataPointIdMap } } - public IBiomeWrapper getBiomeWrapper(int id) { return this.getEntry(id).biome; } - public IBlockStateWrapper getBlockStateWrapper(int id) { return this.getEntry(id).blockState; } + /** @see FullDataPointIdMap#getEntry(int) */ + public IBiomeWrapper getBiomeWrapper(int id) throws IndexOutOfBoundsException { return this.getEntry(id).biome; } + /** @see FullDataPointIdMap#getEntry(int) */ + public IBlockStateWrapper getBlockStateWrapper(int id) throws IndexOutOfBoundsException { return this.getEntry(id).blockState; } + + + /** @return -1 if the list is empty */ + public int getMaxValidId() { return this.entryList.size() - 1; } + + public DhSectionPos getPos() { return this.pos; } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/SingleColumnFullDataAccessor.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/SingleColumnFullDataAccessor.java index 236959cdb..c26c4f23e 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/SingleColumnFullDataAccessor.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/fullData/accessor/SingleColumnFullDataAccessor.java @@ -143,7 +143,8 @@ public class SingleColumnFullDataAccessor implements IFullDataAccessor { int[] remappedEntryIds = target.mapping.mergeAndReturnRemappedEntityIds(this.mapping); long[] sourceData = this.dataArrays[this.dataArrayIndex]; - if (sourceData != null) + // FIXME sourceData.length != 0 may not be a good solution and may end up breaking issues down the line, but fixes exceptions being fired here + if (sourceData != null && sourceData.length != 0) { long[] newData = new long[sourceData.length]; for (int i = 0; i < newData.length; i++) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/FullDataToRenderDataTransformer.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/FullDataToRenderDataTransformer.java index 7d5f28923..f3d34615a 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/FullDataToRenderDataTransformer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/FullDataToRenderDataTransformer.java @@ -21,7 +21,6 @@ package com.seibel.distanthorizons.core.dataObjects.transformers; import com.seibel.distanthorizons.api.enums.config.EBlocksToAvoid; import com.seibel.distanthorizons.core.config.Config; -import com.seibel.distanthorizons.core.config.listeners.ConfigChangeListener; import com.seibel.distanthorizons.core.dataObjects.fullData.FullDataPointIdMap; import com.seibel.distanthorizons.core.dataObjects.fullData.accessor.ChunkSizedFullDataAccessor; import com.seibel.distanthorizons.core.dataObjects.fullData.accessor.SingleColumnFullDataAccessor; @@ -29,7 +28,6 @@ import com.seibel.distanthorizons.core.dataObjects.fullData.sources.CompleteFull import com.seibel.distanthorizons.core.dataObjects.fullData.sources.interfaces.IFullDataSource; import com.seibel.distanthorizons.core.dataObjects.fullData.sources.interfaces.IIncompleteFullDataSource; import com.seibel.distanthorizons.core.dataObjects.render.ColumnRenderSource; -import com.seibel.distanthorizons.core.dataObjects.render.bufferBuilding.ColumnRenderBufferBuilder; import com.seibel.distanthorizons.core.dataObjects.render.columnViews.ColumnArrayView; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.level.IDhClientLevel; @@ -39,7 +37,6 @@ import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.core.util.FullDataPointUtil; import com.seibel.distanthorizons.core.util.LodUtil; import com.seibel.distanthorizons.core.util.RenderDataPointUtil; -import com.seibel.distanthorizons.core.util.ThreadUtil; import com.seibel.distanthorizons.core.wrapperInterfaces.IWrapperFactory; import com.seibel.distanthorizons.core.wrapperInterfaces.block.IBlockStateWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; @@ -47,8 +44,6 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.world.IBiomeWrapper; import org.apache.logging.log4j.Logger; import java.util.HashSet; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutorService; /** * Handles converting {@link ChunkSizedFullDataAccessor}, {@link IIncompleteFullDataSource}, @@ -230,6 +225,8 @@ public class FullDataToRenderDataTransformer } } + private static HashSet brokenPos = new HashSet<>(); + // TODO what does this mean? private static void iterateAndConvert(IDhClientLevel level, int blockX, int blockZ, int genMode, ColumnArrayView column, SingleColumnFullDataAccessor data) @@ -252,8 +249,28 @@ public class FullDataToRenderDataTransformer int blockHeight = FullDataPointUtil.getHeight(fullData); int id = FullDataPointUtil.getId(fullData); int light = FullDataPointUtil.getLight(fullData); - IBiomeWrapper biome = fullDataMapping.getBiomeWrapper(id); - IBlockStateWrapper block = fullDataMapping.getBlockStateWrapper(id); + + IBiomeWrapper biome; + IBlockStateWrapper block; + try + { + biome = fullDataMapping.getBiomeWrapper(id); + block = fullDataMapping.getBlockStateWrapper(id); + } + catch (IndexOutOfBoundsException e) + { + // FIXME sometimes the data map has a length of 0 + if (!brokenPos.contains(fullDataMapping.getPos())) + { + brokenPos.add(fullDataMapping.getPos()); + String dimName = level.getLevelWrapper().getDimensionType().getDimensionName(); + LOGGER.warn("Unable to get data point with id ["+id+"] (Max possible ID: ["+fullDataMapping.getMaxValidId()+"]) for pos ["+fullDataMapping.getPos()+"] in dimension ["+dimName+"]. Error: ["+e.getMessage()+"]. Further errors for this position won't be logged."); + } + + // skip rendering broken data + continue; + } + if (blockStatesToIgnore.contains(block)) { From 5610d9bc0a4d28fba1a1e0e29894ad4cdd37079e Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 4 Nov 2023 10:01:24 -0500 Subject: [PATCH 03/10] fix a typo in LodRenderer --- .../distanthorizons/core/render/renderer/LodRenderer.java | 2 +- 1 file changed, 1 insertion(+), 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 bc229309c..7d66d66c6 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 @@ -619,7 +619,7 @@ public class LodRenderer if (GLProxy.getInstance() == null) { // shouldn't normally happen, but just in case - EVENT_LOGGER.warn("Renderer Cleanup called but the GLProxy has never been initalized!"); + EVENT_LOGGER.warn("Renderer Cleanup called but the GLProxy has never been initialized!"); return; } From d07a2853239e4ff1a9e04793a9a4fc054248cd42 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 4 Nov 2023 11:34:53 -0500 Subject: [PATCH 04/10] move the russian lang file to (hopefully) disable it Apparently the previous renaming didn't work --- .../distanthorizons/lang/{ru_ru.json.DIS => disabled/ru_ru.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename core/src/main/resources/assets/distanthorizons/lang/{ru_ru.json.DIS => disabled/ru_ru.json} (100%) diff --git a/core/src/main/resources/assets/distanthorizons/lang/ru_ru.json.DIS b/core/src/main/resources/assets/distanthorizons/lang/disabled/ru_ru.json similarity index 100% rename from core/src/main/resources/assets/distanthorizons/lang/ru_ru.json.DIS rename to core/src/main/resources/assets/distanthorizons/lang/disabled/ru_ru.json From 7ba3fc0dda72be8218e75bc6058ca7d8538ad3af Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Sat, 4 Nov 2023 23:03:30 +0500 Subject: [PATCH 05/10] Ignore input and return empty data when connection is closed --- .../core/sql/AbstractDhRepo.java | 39 ++++++++++++++++--- .../core/sql/DbConnectionClosedException.java | 20 ++++++++++ 2 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 core/src/main/java/com/seibel/distanthorizons/core/sql/DbConnectionClosedException.java diff --git a/core/src/main/java/com/seibel/distanthorizons/core/sql/AbstractDhRepo.java b/core/src/main/java/com/seibel/distanthorizons/core/sql/AbstractDhRepo.java index 617adc11d..ef588d9be 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/sql/AbstractDhRepo.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/sql/AbstractDhRepo.java @@ -126,6 +126,9 @@ public abstract class AbstractDhRepo { this.query(statement); } + catch (DbConnectionClosedException ignored) + { + } catch (SQLException e) { String message = "Unexpected insert statement error: ["+e.getMessage()+"]."; @@ -139,6 +142,9 @@ public abstract class AbstractDhRepo { this.query(statement); } + catch (DbConnectionClosedException ignored) + { + } catch (SQLException e) { String message = "Unexpected update statement error: ["+e.getMessage()+"]."; @@ -172,17 +178,34 @@ public abstract class AbstractDhRepo // low level DB // //==============// - public List> queryDictionary(String sql) { return this.query(sql); } + public List> queryDictionary(String sql) + { + try + { + return this.query(sql); + } + catch (DbConnectionClosedException e) + { + return new ArrayList<>(); + } + } @Nullable public Map queryDictionaryFirst(String sql) { - List> objectList = this.query(sql); - return !objectList.isEmpty() ? objectList.get(0) : null; + try + { + List> objectList = this.query(sql); + return !objectList.isEmpty() ? objectList.get(0) : null; + } + catch (DbConnectionClosedException e) + { + return null; + } } /** note: this can only handle 1 command at a time */ - private List> query(PreparedStatement statement) throws RuntimeException + private List> query(PreparedStatement statement) throws RuntimeException, DbConnectionClosedException { try { @@ -200,13 +223,16 @@ public abstract class AbstractDhRepo // SQL exceptions generally only happen when something is wrong with // the database or the query and should cause the system to blow up to notify the developer + if (e.toString().equals("database connection closed")) + throw new DbConnectionClosedException(e); + String message = "Unexpected Query error: ["+e.getMessage()+"], for prepared statement: ["+statement+"]."; LOGGER.error(message); throw new RuntimeException(message, e); } } /** note: this can only handle 1 command at a time */ - private List> query(String sql) throws RuntimeException + private List> query(String sql) throws RuntimeException, DbConnectionClosedException { try (Statement statement = this.connection.createStatement()) { @@ -224,6 +250,9 @@ public abstract class AbstractDhRepo // SQL exceptions generally only happen when something is wrong with // the database or the query and should cause the system to blow up to notify the developer + if (e.toString().equals("database connection closed")) + throw new DbConnectionClosedException(e); + String message = "Unexpected Query error: ["+e.getMessage()+"], for script: ["+sql+"]."; LOGGER.error(message); throw new RuntimeException(message, e); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/sql/DbConnectionClosedException.java b/core/src/main/java/com/seibel/distanthorizons/core/sql/DbConnectionClosedException.java new file mode 100644 index 000000000..4c9dd400a --- /dev/null +++ b/core/src/main/java/com/seibel/distanthorizons/core/sql/DbConnectionClosedException.java @@ -0,0 +1,20 @@ +package com.seibel.distanthorizons.core.sql; + +public class DbConnectionClosedException extends Exception +{ + public DbConnectionClosedException() { + super("The database connection is closed."); + } + + public DbConnectionClosedException(String message) { + super(message); + } + + public DbConnectionClosedException(String message, Throwable cause) { + super(message, cause); + } + + public DbConnectionClosedException(Throwable cause) { + super(cause); + } +} From 3daa0eb6ce7fc8adb1787423fedf8323c238035c Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 5 Nov 2023 15:53:57 -0600 Subject: [PATCH 06/10] Fix ThreadPools not setting workerThreadSemaphoreCount at bootup --- .../seibel/distanthorizons/core/util/threading/ThreadPools.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/util/threading/ThreadPools.java b/core/src/main/java/com/seibel/distanthorizons/core/util/threading/ThreadPools.java index 535ade292..a4f851b7c 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/util/threading/ThreadPools.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/util/threading/ThreadPools.java @@ -75,7 +75,7 @@ public class ThreadPools /** how many total worker threads can be used */ - private static int workerThreadSemaphoreCount = 0; + private static int workerThreadSemaphoreCount = Config.Client.Advanced.MultiThreading.numberOfLodBuilderThreads.get(); public static int getWorkerThreadCount() { return workerThreadSemaphoreCount; } private static Semaphore workerThreadSemaphore = null; From 0a8847cdc068addbeb09083143e1e8e9572ee976 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 6 Nov 2023 07:48:57 -0600 Subject: [PATCH 07/10] Fix transparent water when transparency is disabled --- .../dataObjects/render/bufferBuilding/LodQuadBuilder.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/LodQuadBuilder.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/LodQuadBuilder.java index 11e06b209..ae91cb56d 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/LodQuadBuilder.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/render/bufferBuilding/LodQuadBuilder.java @@ -214,7 +214,7 @@ public class LodQuadBuilder // add vertices // //==============// - private static void putQuad(ByteBuffer bb, BufferQuad quad) + private void putQuad(ByteBuffer bb, BufferQuad quad) { int[][] quadBase = DIRECTION_VERTEX_IBO_QUAD[quad.direction.ordinal()]; short widthEastWest = quad.widthEastWest; @@ -261,7 +261,7 @@ public class LodQuadBuilder } } - private static void putVertex(ByteBuffer bb, short x, short y, short z, int color, byte skylight, byte blocklight, int mx, int my, int mz) + private void putVertex(ByteBuffer bb, short x, short y, short z, int color, byte skylight, byte blocklight, int mx, int my, int mz) { skylight %= 16; blocklight %= 16; @@ -287,7 +287,7 @@ public class LodQuadBuilder byte r = (byte) ColorUtil.getRed(color); byte g = (byte) ColorUtil.getGreen(color); byte b = (byte) ColorUtil.getBlue(color); - byte a = (byte) ColorUtil.getAlpha(color); + byte a = this.doTransparency ? (byte) ColorUtil.getAlpha(color) : (byte) 255; // TODO should this be called here or happen somewhere else? bb.put(r); bb.put(g); bb.put(b); From e90daa8e5b123008514b631463a54e838d133d48 Mon Sep 17 00:00:00 2001 From: coolGi Date: Wed, 8 Nov 2023 01:26:32 +1030 Subject: [PATCH 08/10] Added key detection through the new test screen --- .../core/config/gui/AbstractScreen.java | 4 ++-- .../core/config/gui/ConfigScreen.java | 12 ++++++++++-- .../core/config/gui/EmbeddedFrameUtil.java | 2 +- .../config/gui/JavaScreenHandlerScreen.java | 19 +++++++++++++++++++ 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/AbstractScreen.java b/core/src/main/java/com/seibel/distanthorizons/core/config/gui/AbstractScreen.java index b8dbf3cab..d031a18f8 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/AbstractScreen.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/gui/AbstractScreen.java @@ -51,8 +51,8 @@ public abstract class AbstractScreen /** Called every time the window gets re-sized */ public void onResize() { } - ; - /** What happens when the user closes the screen */ + + /** What happens when the user closes the screen */ public void onClose() { } // ---------- Random stuff that might be needed later on ---------- // diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/ConfigScreen.java b/core/src/main/java/com/seibel/distanthorizons/core/config/gui/ConfigScreen.java index 6c5c7a821..5fd55e8a0 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/ConfigScreen.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/gui/ConfigScreen.java @@ -21,8 +21,10 @@ package com.seibel.distanthorizons.core.config.gui; import javax.swing.*; import java.awt.*; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; -public class ConfigScreen extends JFrame +public class ConfigScreen extends JComponent { public ConfigScreen() @@ -33,6 +35,8 @@ public class ConfigScreen extends JFrame constraints.weightx = 0.5; constraints.gridx = 0; constraints.gridy = 0; + constraints.insets = new Insets(10, 10, 0, 10); + add(new JLabel("Hello World!"), constraints); } @@ -40,8 +44,12 @@ public class ConfigScreen extends JFrame public static void main(String[] args) { SwingUtilities.invokeLater(() -> { - JFrame frame = new ConfigScreen(); + JFrame frame = new JFrame(); + + frame.add(new ConfigScreen()); + frame.setSize(300, 200); + frame.setLocationRelativeTo(null); // Makes the window open at the center of the screen frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/EmbeddedFrameUtil.java b/core/src/main/java/com/seibel/distanthorizons/core/config/gui/EmbeddedFrameUtil.java index 20dd0af9e..46e90981b 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/EmbeddedFrameUtil.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/gui/EmbeddedFrameUtil.java @@ -39,7 +39,7 @@ import static org.lwjgl.system.macosx.ObjCRuntime.*; // which is licensed under https://www.lwjgl.org/license /** - * Some utils for embeding awt and swing items into lwjgl windows + * Some utils for embedding awt and swing items into lwjgl windows * * @author Ran * @author coolGi diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/JavaScreenHandlerScreen.java b/core/src/main/java/com/seibel/distanthorizons/core/config/gui/JavaScreenHandlerScreen.java index 7ba1bcaf1..48c6b2077 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/JavaScreenHandlerScreen.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/gui/JavaScreenHandlerScreen.java @@ -23,6 +23,8 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; /** * @@ -52,6 +54,23 @@ public class JavaScreenHandlerScreen extends AbstractScreen frame.add(jComponent); + JavaScreenHandlerScreen thiss = this; + + frame.addKeyListener(new KeyListener() { + @Override + public void keyPressed(KeyEvent keyEvent) + { + System.out.println("Key pressed code=" + keyEvent.getKeyCode() + ", char=" + keyEvent.getKeyChar()); + if (keyEvent.getKeyCode() == KeyEvent.VK_ESCAPE) + thiss.close = true; + } + + @Override + public void keyTyped(KeyEvent keyEvent) { } + @Override + public void keyReleased(KeyEvent keyEvent) { } + }); + if (firstRun) { EmbeddedFrameUtil.embeddedFrameSetBounds(frame, 0, 0, this.width, this.height); From ebc5f30863a02b511ef5a5852bf4e8b64d10ca19 Mon Sep 17 00:00:00 2001 From: Steveplays28 Date: Tue, 7 Nov 2023 20:23:07 +0100 Subject: [PATCH 09/10] feat: Add far and height fog to the fog config API --- .../interfaces/config/client/IDhApiFogConfig.java | 14 ++++++++++++++ .../methods/config/client/DhApiFogConfig.java | 2 ++ 2 files changed, 16 insertions(+) diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/config/client/IDhApiFogConfig.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/config/client/IDhApiFogConfig.java index 849c3b184..f7ad27c84 100644 --- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/config/client/IDhApiFogConfig.java +++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/config/client/IDhApiFogConfig.java @@ -40,6 +40,20 @@ import com.seibel.distanthorizons.api.interfaces.config.IDhApiConfigValue; public interface IDhApiFogConfig extends IDhApiConfigGroup { + //===============// + // inner configs // + //===============// + + /** + * The advanced fog config. + */ + IDhApiFarFogConfig farFog(); + + /** + * The height fog config. + */ + IDhApiHeightFogConfig heightFog(); + //====================// // basic fog settings // //====================// diff --git a/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/config/client/DhApiFogConfig.java b/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/config/client/DhApiFogConfig.java index 79dc571ec..9889723f2 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/config/client/DhApiFogConfig.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/api/external/methods/config/client/DhApiFogConfig.java @@ -41,7 +41,9 @@ public class DhApiFogConfig implements IDhApiFogConfig // inner configs // //===============// + @Override public IDhApiFarFogConfig farFog() { return DhApiFarFogConfig.INSTANCE; } + @Override public IDhApiHeightFogConfig heightFog() { return DhApiHeightFogConfig.INSTANCE; } From 2d7e0d8b212cb9f3802aa2d2996a0238f112a2bd Mon Sep 17 00:00:00 2001 From: James Seibel Date: Wed, 8 Nov 2023 19:38:01 -0600 Subject: [PATCH 10/10] cleanup DhApplyShader --- .../renderer/shaders/DhApplyShader.java | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/DhApplyShader.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/DhApplyShader.java index 256f6b3fe..ea89091a4 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/DhApplyShader.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/shaders/DhApplyShader.java @@ -41,10 +41,6 @@ public class DhApplyShader extends AbstractShaderRenderer public int gDhColorTextureUniform; public int gDepthMapUniform; - public int tempFramebufferId; - public int tempColorTextureId; - public int tempDepthTextureId; - private DhApplyShader() { } @@ -62,28 +58,26 @@ public class DhApplyShader extends AbstractShaderRenderer this.gDhColorTextureUniform = this.shader.getUniformLocation("gDhColorTexture"); this.gDepthMapUniform = this.shader.getUniformLocation("gDhDepthTexture"); - this.tempFramebufferId = GL32.glGenFramebuffers(); - this.tempColorTextureId = GL32.glGenTextures(); - this.tempDepthTextureId = GL32.glGenTextures(); - } @Override - protected void onApplyUniforms(float partialTicks) - { - - } + protected void onApplyUniforms(float partialTicks) { } //========// // render // //========// - private boolean texturesCreated = false; - @Override protected void onRender() { + int targetFrameBuffer = MC_RENDER.getTargetFrameBuffer(); + if (targetFrameBuffer == -1) + { + return; + } + + GL32.glDisable(GL32.GL_DEPTH_TEST); GL32.glEnable(GL32.GL_BLEND); @@ -99,8 +93,9 @@ public class DhApplyShader extends AbstractShaderRenderer GL32.glUniform1i(this.gDepthMapUniform, 1); // Copy to MC's framebuffer - GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, MC_RENDER.getTargetFrameBuffer()); + GL32.glBindFramebuffer(GL32.GL_FRAMEBUFFER, targetFrameBuffer); ScreenQuad.INSTANCE.render(); } + }