From 0de80cfaa7f88718b322703267e2a74cb5e21020 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 12 Mar 2026 06:49:02 -0500 Subject: [PATCH 01/18] Fix AUTO rendering API crashing --- .../distanthorizons/common/wrappers/DependencySetup.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/DependencySetup.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/DependencySetup.java index caa9b8a64..95c3deca9 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/DependencySetup.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/DependencySetup.java @@ -85,11 +85,8 @@ public class DependencySetup EDhApiRenderApi renderingApiEnum = Config.Client.Advanced.Graphics.Experimental.renderingApi.get(); if (renderingApiEnum == EDhApiRenderApi.AUTO) { - #if MC_VER < MC_1_21_11 - renderingApiEnum = EDhApiRenderApi.OPEN_GL; - #else - renderingApiEnum = EDhApiRenderApi.BLAZE_3D; - #endif + IVersionConstants versionConstants = SingletonInjector.INSTANCE.get(IVersionConstants.class); + renderingApiEnum = versionConstants.getDefaultRenderingApi(); } LOGGER.info("Setting DH Rendering API to: ["+renderingApiEnum+"]."); From 4597b7f6471ba3f2f432d9a3c55d01914348330a Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Thu, 12 Mar 2026 19:20:30 +0500 Subject: [PATCH 02/18] Fix server not loading levels --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 0eba376e7..4c9d703e1 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 0eba376e7056389d28943ed39ed114ee1de72e37 +Subproject commit 4c9d703e1501ec5e8f9e63343fa38d29cc9e6719 From a44556f86a210a23f64591c0427cb958b6d70e03 Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Thu, 12 Mar 2026 22:38:38 +0500 Subject: [PATCH 03/18] Replace fix with debug wireframe stub --- .../distanthorizons/common/AbstractModInitializer.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java index 6c5434815..a292ad3ed 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java @@ -19,6 +19,8 @@ import com.seibel.distanthorizons.core.enums.MinecraftTextFormat; import com.seibel.distanthorizons.core.jar.ModJarInfo; import com.seibel.distanthorizons.core.jar.updater.SelfUpdater; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; +import com.seibel.distanthorizons.core.render.renderer.AbstractDebugWireframeRenderer; +import com.seibel.distanthorizons.core.render.renderer.StubDebugWireframeRenderer; import com.seibel.distanthorizons.core.util.NativeDialogUtil; import com.seibel.distanthorizons.core.wrapperInterfaces.IVersionConstants; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; @@ -134,6 +136,7 @@ public abstract class AbstractModInitializer this.initConfig(); this.postInit(); + this.postServerInit(); this.commandInitializer.onServerReady(); this.checkForUpdates(); @@ -223,6 +226,10 @@ public abstract class AbstractModInitializer } private void postClientInit() { DependencySetup.setRenderingApiBindings(); } + private void postServerInit() + { + SingletonInjector.INSTANCE.bind(AbstractDebugWireframeRenderer.class, new StubDebugWireframeRenderer()); + } //endregion From bd2f5a7836ed5074d8454585b80bc6b6f7f5a7ba Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Fri, 13 Mar 2026 00:48:05 +0500 Subject: [PATCH 04/18] Stop pregen on server shutdown --- .../common/commands/PregenCommand.java | 15 +++++++++++---- coreSubProjects | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/commands/PregenCommand.java b/common/src/main/java/com/seibel/distanthorizons/common/commands/PregenCommand.java index 32a698306..3cb0a88de 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/commands/PregenCommand.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/commands/PregenCommand.java @@ -4,14 +4,17 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.seibel.distanthorizons.common.wrappers.world.ServerLevelWrapper; +import com.seibel.distanthorizons.core.api.internal.SharedApi; import com.seibel.distanthorizons.core.generation.PregenManager; import com.seibel.distanthorizons.core.pos.blockPos.DhBlockPos2D; +import com.seibel.distanthorizons.core.world.DhServerWorld; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.arguments.DimensionArgument; import net.minecraft.commands.arguments.coordinates.ColumnPosArgument; import net.minecraft.server.level.ColumnPos; import net.minecraft.server.level.ServerLevel; +import java.util.Objects; import java.util.concurrent.CancellationException; import java.util.concurrent.CompletableFuture; @@ -22,7 +25,11 @@ import static net.minecraft.commands.Commands.literal; public class PregenCommand extends AbstractCommand { - private final PregenManager pregenManager = new PregenManager(); + private PregenManager getPregenManager() + { + DhServerWorld world = (DhServerWorld) Objects.requireNonNull(SharedApi.getAbstractDhWorld()); + return world.getPregenManager(); + } @Override public LiteralArgumentBuilder buildCommand() @@ -48,7 +55,7 @@ public class PregenCommand extends AbstractCommand private int pregenStatus(CommandContext c) { - String statusString = this.pregenManager.getStatusString(); + String statusString = this.getPregenManager().getStatusString(); //noinspection ReplaceNullCheck if (statusString != null) { @@ -68,7 +75,7 @@ public class PregenCommand extends AbstractCommand ColumnPos origin = ColumnPosArgument.getColumnPos(c, "origin"); int chunkRadius = getInteger(c, "chunkRadius"); - CompletableFuture future = this.pregenManager.startPregen( + CompletableFuture future = this.getPregenManager().startPregen( ServerLevelWrapper.getWrapper(level), new DhBlockPos2D(#if MC_VER >= MC_1_19_2 origin.x(), origin.z() #else origin.x, origin.z #endif), chunkRadius @@ -94,7 +101,7 @@ public class PregenCommand extends AbstractCommand private int pregenStop(CommandContext c) { - CompletableFuture runningPregen = this.pregenManager.getRunningPregen(); + CompletableFuture runningPregen = this.getPregenManager().getRunningPregen(); if (runningPregen == null) { return this.sendFailureResponse(c, "Pregen is not running"); diff --git a/coreSubProjects b/coreSubProjects index 4c9d703e1..e2421c97e 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 4c9d703e1501ec5e8f9e63343fa38d29cc9e6719 +Subproject commit e2421c97edd803b6db9845c4ee5e3074628c39e5 From 99703d65dfa32d25e2174129b1a7caf9fabd6554 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Fri, 13 Mar 2026 07:42:09 -0500 Subject: [PATCH 05/18] Fix fade renderer using the wrong frame buffer --- .../openGl/postProcessing/fade/GlVanillaFadeRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlVanillaFadeRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlVanillaFadeRenderer.java index c8c9524c5..238f917ce 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlVanillaFadeRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/postProcessing/fade/GlVanillaFadeRenderer.java @@ -168,7 +168,7 @@ public class GlVanillaFadeRenderer implements IDhVanillaFadeRenderer profiler.popPush("Vanilla Fade Apply"); GlDhFarFadeApplyShader.INSTANCE.fadeTexture = this.fadeTexture; - GlDhFarFadeApplyShader.INSTANCE.readFramebuffer = GlDhFarFadeShader.INSTANCE.frameBuffer; + GlDhFarFadeApplyShader.INSTANCE.readFramebuffer = GlDhVanillaFadeShader.INSTANCE.frameBuffer; GlDhFarFadeApplyShader.INSTANCE.drawFramebuffer = MC_RENDER.getTargetFramebuffer(); GlDhFarFadeApplyShader.INSTANCE.render(renderParams); } From 0ffefaa8c19bd033a8af5fc81100df15e8c8e6b0 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Fri, 13 Mar 2026 07:42:41 -0500 Subject: [PATCH 06/18] Fix a few Legacy GL issues --- .../openGl/GlDhRenderApiDefinition.java | 10 +++++ .../openGl/GlDhTerrainShaderProgram.java | 42 +++++++++---------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhRenderApiDefinition.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhRenderApiDefinition.java index 7c6f0afdc..26f604c10 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhRenderApiDefinition.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhRenderApiDefinition.java @@ -2,6 +2,7 @@ package com.seibel.distanthorizons.common.render.openGl; import com.seibel.distanthorizons.common.render.openGl.generic.GlGenericObjectRenderer; import com.seibel.distanthorizons.common.render.openGl.generic.GlGenericObjectVertexContainer; +import com.seibel.distanthorizons.common.render.openGl.glObject.GLState; import com.seibel.distanthorizons.common.render.openGl.glObject.GlDummyUniformData; import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GLVertexBuffer; import com.seibel.distanthorizons.common.render.openGl.postProcessing.fade.GlDhFarFadeRenderer; @@ -44,6 +45,15 @@ public class GlDhRenderApiDefinition extends AbstractDhRenderApiDefinition @Override public IDhVanillaFadeRenderer getVanillaFadeRenderer() { return GlVanillaFadeRenderer.INSTANCE; } @Override public IDhTestTriangleRenderer getTestTriangleRenderer() { return GlTestTriangleRenderer.INSTANCE; } + @Override + public void bindRenderers() + { + try (GLState state = new GLState()) + { + super.bindRenderers(); + } + } + //endregion diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhTerrainShaderProgram.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhTerrainShaderProgram.java index 2d051735a..48bade6c8 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhTerrainShaderProgram.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhTerrainShaderProgram.java @@ -1,22 +1,3 @@ -/* - * This file is part of the Distant Horizons mod - * licensed under the GNU LGPL v3 License. - * - * Copyright (C) 2020 James Seibel - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - package com.seibel.distanthorizons.common.render.openGl; import com.seibel.distanthorizons.api.interfaces.override.rendering.IDhApiShaderProgram; @@ -55,7 +36,7 @@ import org.lwjgl.opengl.GL32; /** * Handles rendering the normal LOD terrain. - * @see LodQuadBuilder + * @see LodQuadBuilder */ public class GlDhTerrainShaderProgram extends GlShaderProgram implements IDhApiShaderProgram, IDhTerrainRenderer { @@ -69,9 +50,10 @@ public class GlDhTerrainShaderProgram extends GlShaderProgram implements IDhApiS private static final IIrisAccessor IRIS_ACCESSOR = ModAccessorInjector.INSTANCE.get(IIrisAccessor.class); + private boolean init = false; public GlQuadElementBuffer quadIBO = null; - public final GlAbstractVertexAttribute vao; + public GlAbstractVertexAttribute vao; // uniforms // //region @@ -113,6 +95,15 @@ public class GlDhTerrainShaderProgram extends GlShaderProgram implements IDhApiS "assets/distanthorizons/shaders/shared/gl/flat_shaded.frag", new String[]{"vPosition", "color"} ); + } + + public void init() + { + if (this.init) + { + return; + } + this.uCombinedMatrix = this.getUniformLocation("uCombinedMatrix"); this.uModelOffset = this.getUniformLocation("uModelOffset"); @@ -165,6 +156,10 @@ public class GlDhTerrainShaderProgram extends GlShaderProgram implements IDhApiS throw e; } + // unbinding here is necessary to fix an issue when running on Legacy GL + this.vao.unbind(); + + this.init = true; } //endregion @@ -179,6 +174,7 @@ public class GlDhTerrainShaderProgram extends GlShaderProgram implements IDhApiS @Override public void bind() { + this.init(); super.bind(); this.vao.bind(); } @@ -206,7 +202,7 @@ public class GlDhTerrainShaderProgram extends GlShaderProgram implements IDhApiS combinedMatrix.multiply(renderParameters.dhModelViewMatrix); super.bind(); - + // uniforms this.setUniform(this.uCombinedMatrix, combinedMatrix); this.setUniform(this.uMircoOffset, 0.01f); // 0.01 block offset @@ -384,4 +380,4 @@ public class GlDhTerrainShaderProgram extends GlShaderProgram implements IDhApiS -} +} \ No newline at end of file From 90ef8fd64d4897a119dc2acd760f034a91399992 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 14 Mar 2026 09:20:36 -0500 Subject: [PATCH 07/18] Fix GL buffer upload corrupting the GL state --- .../openGl/glObject/buffer/GLBuffer.java | 94 ++++++++++--------- coreSubProjects | 2 +- 2 files changed, 52 insertions(+), 44 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GLBuffer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GLBuffer.java index 8b62b5d37..d556402a9 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GLBuffer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GLBuffer.java @@ -21,6 +21,7 @@ package com.seibel.distanthorizons.common.render.openGl.glObject.buffer; import com.seibel.distanthorizons.api.enums.config.EDhApiGpuUploadMethod; import com.seibel.distanthorizons.common.render.openGl.glObject.GLProxy; +import com.seibel.distanthorizons.common.render.openGl.glObject.GLState; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftGLWrapper; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.logging.DhLogger; @@ -78,7 +79,7 @@ public class GLBuffer implements AutoCloseable static { CLEANUP_THREAD.execute(() -> runPhantomReferenceCleanupLoop()); } - public GLBuffer(boolean isBufferStorage) { this.create(isBufferStorage); } + public GLBuffer(boolean isBufferStorage) { this.destroyOldAndCreate(isBufferStorage); } //endregion @@ -104,7 +105,7 @@ public class GLBuffer implements AutoCloseable //====================// //region - protected void create(boolean asBufferStorage) + protected void destroyOldAndCreate(boolean asBufferStorage) { if (!GLProxy.runningOnRenderThread()) { @@ -112,10 +113,9 @@ public class GLBuffer implements AutoCloseable } // destroy the old buffer if one is present - // (as of 2024-12-31 James didn't see this happen, but just in case) if (this.id != 0) { - destroyBufferIdAsync(this.id); + destroyBufferIdNow(this.id); } this.id = GLMC.glGenBuffers(); @@ -136,13 +136,19 @@ public class GLBuffer implements AutoCloseable return; } - destroyBufferIdAsync(this.id); + RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread("GLBuffer destroyAsync", () -> { destroyBufferIdNow(this.id); }); this.id = 0; this.size = 0; } - private static void destroyBufferIdAsync(int id) + private static void destroyBufferIdNow(int id) { + // only delete valid buffers + if (id == 0) + { + return; + } + // remove and clear the phantom reference if present if (BUFFER_ID_TO_PHANTOM.containsKey(id)) { @@ -157,21 +163,18 @@ public class GLBuffer implements AutoCloseable BUFFER_ID_TO_PHANTOM.remove(id); } - RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread(() -> + // destroy the buffer if it exists, + // the buffer may not exist if the destroy method is called twice + if (GL32.glIsBuffer(id)) { - // destroy the buffer if it exists, - // the buffer may not exist if the destroy method is called twice - if (GL32.glIsBuffer(id)) + GLMC.glDeleteBuffers(id); + bufferCount.decrementAndGet(); + + if (Config.Client.Advanced.Debugging.logBufferGarbageCollection.get()) { - GLMC.glDeleteBuffers(id); - bufferCount.decrementAndGet(); - - if (Config.Client.Advanced.Debugging.logBufferGarbageCollection.get()) - { - LOGGER.info("destroyed buffer [" + id + "], remaining: [" + BUFFER_ID_TO_PHANTOM.size() + "]"); - } + LOGGER.info("destroyed buffer [" + id + "], remaining: [" + BUFFER_ID_TO_PHANTOM.size() + "]"); } - }); + } } //endregion @@ -202,36 +205,41 @@ public class GLBuffer implements AutoCloseable return; } - // make sure the buffer is ready for uploading - this.createOrChangeBufferTypeForUpload(uploadMethod); - switch (uploadMethod) + + // GLState to prevent issues with corrupting the global GL state. + // This can happen especially on legacy GL for MC 1.16.5, creating a black screen. + // Maybe this will also fix random crashing on Mac? + try(GLState state = new GLState()) { - //case NONE: - // return; - case AUTO: - LodUtil.assertNotReach("GpuUploadMethod AUTO must be resolved before call to uploadBuffer()!"); - case BUFFER_STORAGE: - this.uploadBufferStorage(bb, bufferHint); - break; - case DATA: - this.uploadBufferData(bb, bufferHint); - break; - case SUB_DATA: - this.uploadSubData(bb, maxExpansionSize, bufferHint); - break; - default: - LodUtil.assertNotReach("Unknown GpuUploadMethod!"); + // make sure the buffer is ready for uploading + this.createOrChangeBufferTypeForUpload(uploadMethod); + + switch (uploadMethod) + { + case AUTO: + LodUtil.assertNotReach("GpuUploadMethod AUTO must be resolved before call to uploadBuffer()!"); + case BUFFER_STORAGE: + this.uploadBufferStorage(bb); + break; + case DATA: + this.uploadBufferData(bb, bufferHint); + break; + case SUB_DATA: + this.uploadSubData(bb, maxExpansionSize, bufferHint); + break; + default: + LodUtil.assertNotReach("Unknown GpuUploadMethod!"); + } } } /** Requires the buffer to be bound */ - protected void uploadBufferStorage(ByteBuffer bb, int bufferStorageHint) + protected void uploadBufferStorage(ByteBuffer bb) { LodUtil.assertTrue(this.bufferStorage, "Buffer is not bufferStorage but its trying to use bufferStorage upload method!"); int bbSize = bb.limit() - bb.position(); - this.destroyAsync(); - this.create(true); + this.destroyOldAndCreate(true); this.bind(); GL44.glBufferStorage(this.getBufferBindingTarget(), bb, 0); this.size = bbSize; @@ -300,8 +308,8 @@ public class GLBuffer implements AutoCloseable { // recreate if the buffer storage type changed this.bind(); - this.destroyAsync(); - this.create(uploadMethod.useBufferStorage); + destroyBufferIdNow(this.id); + this.destroyOldAndCreate(uploadMethod.useBufferStorage); this.bind(); } else @@ -310,7 +318,7 @@ public class GLBuffer implements AutoCloseable // This can happen if the buffer was deleted previously. if (this.id == 0) { - this.create(this.bufferStorage); + this.destroyOldAndCreate(this.bufferStorage); } this.bind(); @@ -346,7 +354,7 @@ public class GLBuffer implements AutoCloseable if (PHANTOM_TO_BUFFER_ID.containsKey(phantomRef)) { int id = PHANTOM_TO_BUFFER_ID.get(phantomRef); - destroyBufferIdAsync(id); + RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread("GLBuffer phantom destroy", () -> { destroyBufferIdNow(id); }); //LOGGER.warn("Buffer Phantom collected, ID: ["+id+"]"); } diff --git a/coreSubProjects b/coreSubProjects index e2421c97e..38e104a9f 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit e2421c97edd803b6db9845c4ee5e3074628c39e5 +Subproject commit 38e104a9fcad0c7830ad58d0c7e5bdd2def4d444 From 030f81439875bfbcd242aee62396bd3d7c53d922 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 14 Mar 2026 09:32:35 -0500 Subject: [PATCH 08/18] Fix 1.21.11 compiling --- .../render/blaze/objects/BlazeGenericObjectVertexContainer.java | 2 +- .../common/wrappers/minecraft/MinecraftClientWrapper.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java index 34b16009f..a0b3e3c15 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java @@ -263,7 +263,7 @@ public class BlazeGenericObjectVertexContainer implements IDhGenericObjectVertex @Override public void close() { - RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread(() -> + RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread("BlazeGenericObjectVertexContainer close", () -> { if (this.vboGpuBuffer != null) { diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java index eeb9996d2..3e7dd09f9 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftClientWrapper.java @@ -225,7 +225,7 @@ public class MinecraftClientWrapper implements IMinecraftClientWrapper, IMinecra player.displayClientMessage(net.minecraft.network.chat.Component.translatable(string), /*isOverlay*/false); #else - RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread(() -> + RenderThreadTaskHandler.INSTANCE.queueRunningOnRenderThread("MinecraftClientWrapper sendChatMessage", () -> { player.displayClientMessage(net.minecraft.network.chat.Component.translatable(string), /*isOverlay*/false); }); From e91888934b1f145cbacdf4cb54b67d2a38e198ac Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 14 Mar 2026 10:18:50 -0500 Subject: [PATCH 09/18] Try fix concurrency issue with render closing --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index 38e104a9f..cd5a3ce52 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 38e104a9fcad0c7830ad58d0c7e5bdd2def4d444 +Subproject commit cd5a3ce52b91cca240cf87b2ea68c8212f759382 From 03a29fbacb78a38fc83bb748aaada159e6caaac0 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 14 Mar 2026 10:19:03 -0500 Subject: [PATCH 10/18] fix compiler warnings --- .../blaze/util/BlazeDhVertexFormatUtil.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/util/BlazeDhVertexFormatUtil.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/util/BlazeDhVertexFormatUtil.java index d4cea9b20..5de6f3be2 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/util/BlazeDhVertexFormatUtil.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/util/BlazeDhVertexFormatUtil.java @@ -14,28 +14,29 @@ import com.seibel.distanthorizons.core.logging.DhLogger; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.wrapperInterfaces.IVersionConstants; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; +import org.jetbrains.annotations.NotNull; /** * @see LodQuadBuilder */ +@SuppressWarnings("DataFlowIssue") // ignore null setter warnings in the static constructor (those will only be null if the render API is GL and in that case we should never use these objects) public class BlazeDhVertexFormatUtil { private static final DhLogger LOGGER = new DhLoggerBuilder().build(); + @NotNull public static final VertexFormatElement SCREEN_POS; + @NotNull public static final VertexFormatElement RGBA_FLOAT_COLOR; - public static final VertexFormatElement SCREEN_POS; - public static final VertexFormatElement RGBA_FLOAT_COLOR; - - public static final VertexFormatElement SHORT_XYZ_POS; - public static final VertexFormatElement BYTE_PAD; + @NotNull public static final VertexFormatElement SHORT_XYZ_POS; + @NotNull public static final VertexFormatElement BYTE_PAD; /** contains light and micro-offset */ - public static final VertexFormatElement META; - public static final VertexFormatElement RGBA_UBYTE_COLOR; - public static final VertexFormatElement IRIS_MATERIAL; - public static final VertexFormatElement IRIS_NORMAL; + @NotNull public static final VertexFormatElement META; + @NotNull public static final VertexFormatElement RGBA_UBYTE_COLOR; + @NotNull public static final VertexFormatElement IRIS_MATERIAL; + @NotNull public static final VertexFormatElement IRIS_NORMAL; - public static final VertexFormatElement FLOAT_XYZ_POS; + @NotNull public static final VertexFormatElement FLOAT_XYZ_POS; @@ -84,6 +85,7 @@ public class BlazeDhVertexFormatUtil } else { + // set to null so we can fail fast with a null pointer if we ever attempt to incorrectly use these SCREEN_POS = null; RGBA_FLOAT_COLOR = null; From 9715db3ac690904bd3ac5e3f8341b1b290bfcd44 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 14 Mar 2026 14:31:25 -0500 Subject: [PATCH 11/18] fix generic rendering not uploading in some cases --- .../BlazeGenericObjectVertexContainer.java | 17 ++++++++++------- .../generic/GlGenericObjectVertexContainer.java | 5 +---- coreSubProjects | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java index a0b3e3c15..853a0faf6 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java @@ -84,6 +84,7 @@ public class BlazeGenericObjectVertexContainer implements IDhGenericObjectVertex //===========================// //region + @Override public void updateVertexData(List uploadBoxList) { int boxCount = uploadBoxList.size(); @@ -188,14 +189,14 @@ public class BlazeGenericObjectVertexContainer implements IDhGenericObjectVertex } this.vertexBuffer.flip(); this.indexBuffer.flip(); - - - this.state = BlazeGenericObjectVertexContainer.EState.READY_TO_UPLOAD; } private int vertexBufferSize() { - int faceCount = this.uploadedBoxCount * 6; + // minimum of 1 box to prevent trying to create a buffer of size 0 + int boxCount = Math.max(this.uploadedBoxCount, 1); + + int faceCount = boxCount * 6; int vertexCount = faceCount * 6; int byteSize = vertexCount * 3 * Float.BYTES; // x,y,z @@ -205,11 +206,15 @@ public class BlazeGenericObjectVertexContainer implements IDhGenericObjectVertex } private int indexBufferSize() { - int quadCount = this.uploadedBoxCount * 36; + // minimum of 1 box to prevent trying to create a buffer of size 0 + int boxCount = Math.max(this.uploadedBoxCount, 1); + + int quadCount = boxCount * 36; int byteSize = quadCount * GLEnums.getTypeSize(GL32.GL_UNSIGNED_INT) * 6; return byteSize; } + @Override public void uploadDataToGpu() { // vertex @@ -245,8 +250,6 @@ public class BlazeGenericObjectVertexContainer implements IDhGenericObjectVertex COMMAND_ENCODER.writeToBuffer(bufferSlice, this.indexBuffer); } - - this.state = EState.RENDER; } private String getVertexBufferName() { return "distantHorizons:GenericVertexBuffer"; } private String getIndexBufferName() { return "distantHorizons:GenericIndexBuffer"; } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectVertexContainer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectVertexContainer.java index 48eb20f31..054d7b149 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectVertexContainer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectVertexContainer.java @@ -105,10 +105,9 @@ public class GlGenericObjectVertexContainer implements IDhGenericObjectVertexBuf this.materialData[i] = box.material; } - - this.state = GlGenericObjectVertexContainer.EState.READY_TO_UPLOAD; } + @Override public void uploadDataToGpu() { this.tryCreateBuffers(); @@ -128,8 +127,6 @@ public class GlGenericObjectVertexContainer implements IDhGenericObjectVertexBuf // Upload materials GL32.glBindBuffer(GL32.GL_ARRAY_BUFFER, this.material); GL32.glBufferData(GL32.GL_ARRAY_BUFFER, this.materialData, GL32.GL_DYNAMIC_DRAW); - - this.state = EState.RENDER; } /** needs to be done on the render thread */ private void tryCreateBuffers() diff --git a/coreSubProjects b/coreSubProjects index cd5a3ce52..aa5383577 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit cd5a3ce52b91cca240cf87b2ea68c8212f759382 +Subproject commit aa5383577265030c1be4e4400a7f61826769bfce From f1218605634b90dd29221118415b426466fc3ca3 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 14 Mar 2026 14:33:13 -0500 Subject: [PATCH 12/18] Fixes beacons not always showing/hiding correctly --- coreSubProjects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreSubProjects b/coreSubProjects index aa5383577..8a39610b8 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit aa5383577265030c1be4e4400a7f61826769bfce +Subproject commit 8a39610b8c7025c54a469ef21a4f36f4b64f8d9f From 9d35a70437e10750447f6f896f47597984cb8fda Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 14 Mar 2026 14:33:39 -0500 Subject: [PATCH 13/18] fix shift-click not working on config min option --- .../common/wrappers/gui/ClassicConfigGUI.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java index 77fc61e2a..4413f3abf 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/gui/ClassicConfigGUI.java @@ -445,7 +445,11 @@ public class ClassicConfigGUI // move forward or backwards depending on if the shift key is pressed int index = shiftPressed ? startingIndex-1 : startingIndex+1; - index = (index >= enumList.size()) ? 0 : index; + + // wrap around to the other side of the array when necessary + if (index >= enumList.size()) { index = 0; } + else if (index < 0) { index = enumList.size() - 1; } + // walk through the enums to find the next selectable one while (index != startingIndex) @@ -462,14 +466,8 @@ public class ClassicConfigGUI index = shiftPressed ? index-1 : index+1; // wrap around to the other side of the array when necessary - if (index >= enumList.size()) - { - index = 0; - } - else if (index < 0) - { - index = enumList.size() - 1; - } + if (index >= enumList.size()) { index = 0; } + else if (index < 0) { index = enumList.size() - 1; } } From 5905fe3df2363038e8ce041e8d6475ce8a76739b Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 14 Mar 2026 14:33:55 -0500 Subject: [PATCH 14/18] fix some generic objects not rendering --- .../common/render/blaze/BlazeDhGenericObjectRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhGenericObjectRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhGenericObjectRenderer.java index 867dad491..8c50398b3 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhGenericObjectRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhGenericObjectRenderer.java @@ -568,7 +568,7 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer renderPass.drawIndexed( /*indexStart*/ 0, /*firstIndex*/0, - /*indexCount*/container.uploadedBoxCount * 24, // TODO? + /*indexCount*/container.uploadedBoxCount * 36, /*instanceCount*/1); } From e3b67ef500008d7f48e6d2d8bc5ad59b0fc09f65 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 14 Mar 2026 15:27:16 -0500 Subject: [PATCH 15/18] fix generic objects not uploading on first add also clean up some comments --- .../render/blaze/BlazeDhGenericObjectRenderer.java | 12 ++++++++---- .../objects/BlazeGenericObjectVertexContainer.java | 13 ++++--------- .../openGl/generic/GlGenericObjectRenderer.java | 5 +++++ coreSubProjects | 2 +- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhGenericObjectRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhGenericObjectRenderer.java index 8c50398b3..c57ec2fbf 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhGenericObjectRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhGenericObjectRenderer.java @@ -291,7 +291,11 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer throw new IllegalArgumentException("Box group must be of type ["+ RenderableBoxGroup.class.getSimpleName()+"], type received: ["+(iBoxGroup != null ? iBoxGroup.getClass() : "NULL")+"]."); } RenderableBoxGroup boxGroup = (RenderableBoxGroup) iBoxGroup; - + if (boxGroup.size() != 0) + { + // trigger a box change to make sure the initial data is uploaded + boxGroup.triggerBoxChange(); + } long id = boxGroup.getId(); if (this.boxGroupById.containsKey(id)) @@ -495,7 +499,7 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer BlazeDhMetaRenderer.INSTANCE.dhDepthTextureWrapper.textureView, /*optionalDepthValueAsDouble*/ OptionalDouble.empty())) { - this.renderBoxGroupInstanced(renderPass, renderEventParam, boxGroup, camPos, profiler); + this.renderBoxGroupInstanced(renderPass, renderEventParam, boxGroup, profiler); } profiler.pop(); // resource path @@ -534,7 +538,7 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer private void renderBoxGroupInstanced( RenderPass renderPass, RenderParams renderEventParam, - RenderableBoxGroup boxGroup, Vec3d camPos, + RenderableBoxGroup boxGroup, IProfilerWrapper profiler) { // update instance data // @@ -568,7 +572,7 @@ public class BlazeDhGenericObjectRenderer implements IDhGenericRenderer renderPass.drawIndexed( /*indexStart*/ 0, /*firstIndex*/0, - /*indexCount*/container.uploadedBoxCount * 36, + /*indexCount*/container.uploadedBoxCount * 36, // 36 = 6 faces * 6 verticies per face /*instanceCount*/1); } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java index 853a0faf6..0eb4754eb 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java @@ -88,11 +88,6 @@ public class BlazeGenericObjectVertexContainer implements IDhGenericObjectVertex public void updateVertexData(List uploadBoxList) { int boxCount = uploadBoxList.size(); - if (boxCount == 0) - { - return; // TODO done just to fix a buffer empty crash - } - // recreate the data arrays if their size is different if (this.uploadedBoxCount != boxCount) @@ -196,8 +191,8 @@ public class BlazeGenericObjectVertexContainer implements IDhGenericObjectVertex // minimum of 1 box to prevent trying to create a buffer of size 0 int boxCount = Math.max(this.uploadedBoxCount, 1); - int faceCount = boxCount * 6; - int vertexCount = faceCount * 6; + int faceCount = boxCount * 6; // 6 faces on a cube + int vertexCount = faceCount * 6; // 6 vertices per cube int byteSize = vertexCount * 3 * Float.BYTES; // x,y,z byteSize += vertexCount * 4; // r,g,b,a @@ -209,8 +204,8 @@ public class BlazeGenericObjectVertexContainer implements IDhGenericObjectVertex // minimum of 1 box to prevent trying to create a buffer of size 0 int boxCount = Math.max(this.uploadedBoxCount, 1); - int quadCount = boxCount * 36; - int byteSize = quadCount * GLEnums.getTypeSize(GL32.GL_UNSIGNED_INT) * 6; + int quadCount = boxCount * 6 * 6; // 6 faces with 6 vertices each + int byteSize = quadCount * GLEnums.getTypeSize(GL32.GL_UNSIGNED_INT); return byteSize; } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectRenderer.java index 7e38e00e7..e5abfd190 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectRenderer.java @@ -361,6 +361,11 @@ public class GlGenericObjectRenderer implements IDhGenericRenderer throw new IllegalArgumentException("Box group must be of type ["+ RenderableBoxGroup.class.getSimpleName()+"], type received: ["+(iBoxGroup != null ? iBoxGroup.getClass() : "NULL")+"]."); } RenderableBoxGroup boxGroup = (RenderableBoxGroup) iBoxGroup; + if (boxGroup.size() != 0) + { + // trigger a box change to make sure the initial data is uploaded + boxGroup.triggerBoxChange(); + } long id = boxGroup.getId(); diff --git a/coreSubProjects b/coreSubProjects index 8a39610b8..082b364f5 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 8a39610b8c7025c54a469ef21a4f36f4b64f8d9f +Subproject commit 082b364f52f793182a73c7f6db90c473d9868dd0 From b5890a4783e1b2ec9fda1de2b40ac783d0e13dbd Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 14 Mar 2026 15:33:35 -0500 Subject: [PATCH 16/18] clean up todo comments --- .../common/render/blaze/BlazeDhMetaRenderer.java | 13 ++++++++----- .../common/render/blaze/BlazeDhTerrainRenderer.java | 8 +++++--- .../objects/BlazeGenericObjectVertexContainer.java | 1 - .../render/openGl/GlDhDebugWireframeRenderer.java | 6 +++--- .../common/render/openGl/GlDhMetaRenderer.java | 4 ++-- .../render/openGl/GlDhTerrainShaderProgram.java | 4 ++-- .../openGl/generic/GlGenericObjectRenderer.java | 6 +++--- .../{GLElementBuffer.java => GLIndexBuffer.java} | 12 ++++-------- ...uadElementBuffer.java => GlQuadIndexBuffer.java} | 6 +++--- coreSubProjects | 2 +- 10 files changed, 31 insertions(+), 31 deletions(-) rename common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/{GLElementBuffer.java => GLIndexBuffer.java} (85%) rename common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/{GlQuadElementBuffer.java => GlQuadIndexBuffer.java} (97%) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhMetaRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhMetaRenderer.java index e71e91dab..d6d551539 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhMetaRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhMetaRenderer.java @@ -8,16 +8,21 @@ public class BlazeDhMetaRenderer {} import com.mojang.blaze3d.textures.GpuTexture; import com.seibel.distanthorizons.common.render.blaze.apply.BlazeDhApplyRenderer; import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureWrapper; +import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.render.RenderParams; import com.seibel.distanthorizons.core.util.ColorUtil; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhMetaRenderer; import net.minecraft.client.Minecraft; +import java.awt.*; + public class BlazeDhMetaRenderer implements IDhMetaRenderer { public static final BlazeDhMetaRenderer INSTANCE = new BlazeDhMetaRenderer(); + private static final IMinecraftRenderWrapper MC_RENDER = SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class); + private BlazeDhApplyRenderer applyRenderer; @@ -79,12 +84,10 @@ public class BlazeDhMetaRenderer implements IDhMetaRenderer @Override public void clearDhDepthAndColorTextures(RenderParams renderParams) { - // TODO use for clear color - //IMinecraftRenderWrapper r; - //r.getSkyColor() - this.dhDepthTextureWrapper.clearDepth(1.0f); - this.dhColorTextureWrapper.clearColor(ColorUtil.argbToInt(1, 1, 1, 1)); + + Color color = MC_RENDER.getSkyColor(); + this.dhColorTextureWrapper.clearColor(ColorUtil.toColorInt(color)); } //endregion diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhTerrainRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhTerrainRenderer.java index 27513a919..24a9f439c 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhTerrainRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhTerrainRenderer.java @@ -33,7 +33,7 @@ import com.seibel.distanthorizons.core.logging.DhLogger; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.common.render.openGl.glObject.enums.GLEnums; -import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GlQuadElementBuffer; +import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GlQuadIndexBuffer; import com.seibel.distanthorizons.core.render.RenderParams; import com.seibel.distanthorizons.core.util.RenderUtil; import com.seibel.distanthorizons.core.util.math.Mat4f; @@ -88,7 +88,7 @@ public class BlazeDhTerrainRenderer implements IDhTerrainRenderer { return; } - this.init = true; // todo only set when succeeded (in case of exception) + VertexFormat vertexFormat = VertexFormat.builder() @@ -133,6 +133,8 @@ public class BlazeDhTerrainRenderer implements IDhTerrainRenderer pipelineBuilder.withBlend(BlendFunction.TRANSLUCENT); this.transparentPipeline = pipelineBuilder.build(); } + + this.init = true; } //endregion @@ -264,7 +266,7 @@ public class BlazeDhTerrainRenderer implements IDhTerrainRenderer if (this.indexBuffer == null) { ByteBuffer buffer = MemoryUtil.memAlloc(LodQuadBuilder.getMaxBufferByteSize() * GLEnums.getTypeSize(GL32.GL_UNSIGNED_INT) * 6); - GlQuadElementBuffer.buildBuffer(LodQuadBuilder.getMaxBufferByteSize(), buffer, GL32.GL_UNSIGNED_INT); + GlQuadIndexBuffer.buildBuffer(LodQuadBuilder.getMaxBufferByteSize(), buffer, GL32.GL_UNSIGNED_INT); // create buffer if needed diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java index 0eb4754eb..603480b86 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/objects/BlazeGenericObjectVertexContainer.java @@ -179,7 +179,6 @@ public class BlazeGenericObjectVertexContainer implements IDhGenericObjectVertex this.vertexBuffer.put(a); this.vertexBuffer.put(box.material); - // TODO make sure this all is a multiple of 4 like LodQuadBuilder (might cause issues with AMD/Mac otherwise) } } this.vertexBuffer.flip(); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhDebugWireframeRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhDebugWireframeRenderer.java index 6399a7d54..9e35bcde6 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhDebugWireframeRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhDebugWireframeRenderer.java @@ -20,7 +20,7 @@ package com.seibel.distanthorizons.common.render.openGl; import com.seibel.distanthorizons.api.enums.config.EDhApiGpuUploadMethod; -import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GLElementBuffer; +import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GLIndexBuffer; import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GLVertexBuffer; import com.seibel.distanthorizons.common.render.openGl.glObject.shader.GlShaderProgram; import com.seibel.distanthorizons.common.render.openGl.glObject.vertexAttribute.GlAbstractVertexAttribute; @@ -53,7 +53,7 @@ public class GlDhDebugWireframeRenderer extends AbstractDebugWireframeRenderer // rendering setup private GlShaderProgram basicShader; private GLVertexBuffer vertexBuffer; - private GLElementBuffer indexBuffer; + private GLIndexBuffer indexBuffer; private GlAbstractVertexAttribute va; private boolean init = false; @@ -140,7 +140,7 @@ public class GlDhDebugWireframeRenderer extends AbstractDebugWireframeRenderer boxOutlineBuffer.order(ByteOrder.nativeOrder()); boxOutlineBuffer.asIntBuffer().put(BOX_OUTLINE_INDICES); boxOutlineBuffer.rewind(); - this.indexBuffer = new GLElementBuffer(false); + this.indexBuffer = new GLIndexBuffer(false); this.indexBuffer.uploadBuffer(boxOutlineBuffer, EDhApiGpuUploadMethod.DATA, BOX_OUTLINE_INDICES.length * Integer.BYTES, GL32.GL_STATIC_DRAW); } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhMetaRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhMetaRenderer.java index eba0bae3d..fe2c84bbf 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhMetaRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhMetaRenderer.java @@ -8,7 +8,7 @@ import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhAp import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiTextureCreatedParam; import com.seibel.distanthorizons.common.render.openGl.glObject.GLProxy; import com.seibel.distanthorizons.common.render.openGl.glObject.GlDhFramebuffer; -import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GlQuadElementBuffer; +import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GlQuadIndexBuffer; import com.seibel.distanthorizons.common.render.openGl.glObject.texture.*; import com.seibel.distanthorizons.common.render.openGl.postProcessing.apply.GlDhApplyShader; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftGLWrapper; @@ -242,7 +242,7 @@ public class GlDhMetaRenderer implements IDhMetaRenderer LOGGER.info("Setting up renderer"); - GlDhTerrainShaderProgram.INSTANCE.quadIBO = new GlQuadElementBuffer(); + GlDhTerrainShaderProgram.INSTANCE.quadIBO = new GlQuadIndexBuffer(); GlDhTerrainShaderProgram.INSTANCE.quadIBO.reserve(LodQuadBuilder.getMaxBufferByteSize()); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhTerrainShaderProgram.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhTerrainShaderProgram.java index 48bade6c8..e6f30b78f 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhTerrainShaderProgram.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhTerrainShaderProgram.java @@ -6,7 +6,7 @@ import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhAp import com.seibel.distanthorizons.api.objects.math.DhApiVec3f; import com.seibel.distanthorizons.common.render.openGl.glObject.GLProxy; import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GLVertexBuffer; -import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GlQuadElementBuffer; +import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GlQuadIndexBuffer; import com.seibel.distanthorizons.common.render.openGl.glObject.shader.GlShaderProgram; import com.seibel.distanthorizons.common.render.openGl.glObject.vertexAttribute.GlAbstractVertexAttribute; import com.seibel.distanthorizons.common.render.openGl.glObject.vertexAttribute.GlVertexAttributePostGL43; @@ -52,7 +52,7 @@ public class GlDhTerrainShaderProgram extends GlShaderProgram implements IDhApiS private boolean init = false; - public GlQuadElementBuffer quadIBO = null; + public GlQuadIndexBuffer quadIBO = null; public GlAbstractVertexAttribute vao; // uniforms // diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectRenderer.java index e5abfd190..0fae35b2c 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/generic/GlGenericObjectRenderer.java @@ -30,7 +30,7 @@ import com.seibel.distanthorizons.api.objects.math.DhApiVec3d; import com.seibel.distanthorizons.api.objects.render.DhApiRenderableBox; import com.seibel.distanthorizons.api.objects.render.DhApiRenderableBoxGroupShading; import com.seibel.distanthorizons.common.render.openGl.glObject.GLProxy; -import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GLElementBuffer; +import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GLIndexBuffer; import com.seibel.distanthorizons.common.render.openGl.glObject.buffer.GLVertexBuffer; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftGLWrapper; import com.seibel.distanthorizons.core.config.Config; @@ -91,7 +91,7 @@ public class GlGenericObjectRenderer implements IDhGenericRenderer private IDhApiGenericObjectShaderProgram instancedShaderProgram; private IDhApiGenericObjectShaderProgram directShaderProgram; private GLVertexBuffer boxVertexBuffer; - private GLElementBuffer boxIndexBuffer; + private GLIndexBuffer boxIndexBuffer; private boolean instancedRenderingAvailable; private boolean vertexAttribDivisorSupported; @@ -232,7 +232,7 @@ public class GlGenericObjectRenderer implements IDhGenericRenderer ByteBuffer solidIndexBuffer = MemoryUtil.memAlloc(BOX_INDICES.length * Integer.BYTES); solidIndexBuffer.asIntBuffer().put(BOX_INDICES); solidIndexBuffer.rewind(); - this.boxIndexBuffer = new GLElementBuffer(false); + this.boxIndexBuffer = new GLIndexBuffer(false); this.boxIndexBuffer.uploadBuffer(solidIndexBuffer, EDhApiGpuUploadMethod.DATA, BOX_INDICES.length * Integer.BYTES, GL32.GL_STATIC_DRAW); this.boxIndexBuffer.bind(); MemoryUtil.memFree(solidIndexBuffer); diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GLElementBuffer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GLIndexBuffer.java similarity index 85% rename from common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GLElementBuffer.java rename to common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GLIndexBuffer.java index 2f6c042bf..d7ca1b74b 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GLElementBuffer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GLIndexBuffer.java @@ -22,13 +22,12 @@ package com.seibel.distanthorizons.common.render.openGl.glObject.buffer; import org.lwjgl.opengl.GL32; /** - * This is a container for a OpenGL - * VBO (Vertex Buffer Object). + * AKA the GLElementBuffer * * @author James Seibel * @version 11-20-2021 */ -public class GLElementBuffer extends GLBuffer +public class GLIndexBuffer extends GLBuffer { /** * When uploading to a buffer that is too small, recreate it this many times @@ -39,7 +38,7 @@ public class GLElementBuffer extends GLBuffer protected int type = GL32.GL_UNSIGNED_INT; public int getType() { return type; } - public GLElementBuffer(boolean isBufferStorage) + public GLIndexBuffer(boolean isBufferStorage) { super(isBufferStorage); } @@ -52,9 +51,6 @@ public class GLElementBuffer extends GLBuffer } @Override - public int getBufferBindingTarget() - { - return GL32.GL_ELEMENT_ARRAY_BUFFER; - } + public int getBufferBindingTarget() { return GL32.GL_ELEMENT_ARRAY_BUFFER; } } \ No newline at end of file diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GlQuadElementBuffer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GlQuadIndexBuffer.java similarity index 97% rename from common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GlQuadElementBuffer.java rename to common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GlQuadIndexBuffer.java index c0bcca307..bf50628bf 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GlQuadElementBuffer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/glObject/buffer/GlQuadIndexBuffer.java @@ -28,8 +28,8 @@ import org.lwjgl.system.MemoryUtil; import java.nio.ByteBuffer; -/** AKA Index Buffer TODO RENAME */ -public class GlQuadElementBuffer extends GLElementBuffer +/** aka GlQuadElementBuffer */ +public class GlQuadIndexBuffer extends GLIndexBuffer { private static final DhLogger LOGGER = new DhLoggerBuilder().build(); @@ -40,7 +40,7 @@ public class GlQuadElementBuffer extends GLElementBuffer //=============// //region - public GlQuadElementBuffer() { super(false); } + public GlQuadIndexBuffer() { super(false); } public void reserve(int quadCount) { diff --git a/coreSubProjects b/coreSubProjects index 082b364f5..2393bdd8e 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 082b364f52f793182a73c7f6db90c473d9868dd0 +Subproject commit 2393bdd8e878d94ed8fe2de561a9533ee012d04c From 241baef7afa192af07d4c95988ff572c84a966ef Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 14 Mar 2026 15:55:47 -0500 Subject: [PATCH 17/18] Improve warning logs for chunkUpdateManager --- .../wrappers/worldGeneration/BatchGenerationEnvironment.java | 5 ----- .../wrappers/worldGeneration/InternalServerGenerator.java | 5 ----- coreSubProjects | 2 +- 3 files changed, 1 insertion(+), 11 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/BatchGenerationEnvironment.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/BatchGenerationEnvironment.java index 3928866e3..a2bbc7eaa 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/BatchGenerationEnvironment.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/BatchGenerationEnvironment.java @@ -729,11 +729,6 @@ public final class BatchGenerationEnvironment implements IBatchGeneratorEnvironm { updateManager.addPosToIgnore(chunkWrapper.getChunkPos()); } - else - { - // shouldn't happen, but just in case - LOGGER.warn("Unable to find chunk update manager for server level ["+BatchGenerationEnvironment.this.dhServerLevel+"], chunk updates may fail."); - } } }, MS_TO_IGNORE_CHUNK_AFTER_COMPLETION); } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/InternalServerGenerator.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/InternalServerGenerator.java index 1ef75ed45..a356ca0c7 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/InternalServerGenerator.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/worldGeneration/InternalServerGenerator.java @@ -309,11 +309,6 @@ public class InternalServerGenerator { updateManager.addPosToIgnore(new DhChunkPos(chunkPos.x, chunkPos.z)); } - else - { - // shouldn't happen, but just in case - LOGGER.warn("Unable to find chunk update manager for server level ["+dhLevel+"], chunk updates may fail."); - } } }, MS_TO_IGNORE_CHUNK_AFTER_COMPLETION); diff --git a/coreSubProjects b/coreSubProjects index 2393bdd8e..17df533fa 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 2393bdd8e878d94ed8fe2de561a9533ee012d04c +Subproject commit 17df533fa6fd64a09969486b6775fe9cae0e583c From 9bd946a41c11049c64b431720f1de9cd274366b6 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sat, 14 Mar 2026 15:55:57 -0500 Subject: [PATCH 18/18] fix blaze wireframe renderer not appearing outside LODs --- .../common/render/blaze/BlazeDebugWireframeRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDebugWireframeRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDebugWireframeRenderer.java index 37d46b48b..cd71bb320 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDebugWireframeRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDebugWireframeRenderer.java @@ -146,7 +146,7 @@ public class BlazeDebugWireframeRenderer extends AbstractDebugWireframeRenderer RenderPipeline.Builder pipelineBuilder = RenderPipeline.builder(); { pipelineBuilder.withCull(false); - pipelineBuilder.withDepthWrite(false); + pipelineBuilder.withDepthWrite(true); pipelineBuilder.withDepthTestFunction(DepthTestFunction.LESS_DEPTH_TEST); pipelineBuilder.withColorWrite(true); pipelineBuilder.withoutBlend();