From 6aad156a32ab552bac8f3a24df0edf78bda98a8a Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 24 Mar 2026 07:16:31 -0500 Subject: [PATCH] Fix Iris using the wrong far clip plane https://github.com/IrisShaders/Iris/issues/2534 --- .../distanthorizons/core/util/RenderUtil.java | 39 ++++++++++++++++--- 1 file changed, 33 insertions(+), 6 deletions(-) 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 bc9bc7799..30c22169d 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 @@ -19,12 +19,17 @@ package com.seibel.distanthorizons.core.util; +import com.seibel.distanthorizons.api.DhApi; import com.seibel.distanthorizons.api.objects.math.DhApiMat4f; import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.core.config.Config; +import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; +import com.seibel.distanthorizons.core.logging.DhLogger; +import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper; +import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IIrisAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; import com.seibel.distanthorizons.coreapi.util.MathUtil; import com.seibel.distanthorizons.core.util.math.Mat4f; @@ -35,8 +40,11 @@ import com.seibel.distanthorizons.core.util.math.Mat4f; */ public class RenderUtil { + private static final DhLogger LOGGER = new DhLoggerBuilder().maxCountPerSecond(1).build(); + private static final IMinecraftClientWrapper MC = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); private static final IMinecraftRenderWrapper MC_RENDER = SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class); + private static final IIrisAccessor IRIS_ACCESSOR = ModAccessorInjector.INSTANCE.get(IIrisAccessor.class); /** * all speeds are measured in blocks per second @@ -79,7 +87,7 @@ public class RenderUtil nearClipDist = Math.min(nearClipDist, 7.5f); } - float farClipDist = (float) RenderUtil.getFarClipPlaneDistanceInBlocks(); + float farClipDist = RenderUtil.getFarClipPlaneDistanceInBlocks(); // Create a copy of the current matrix, so it won't be modified. Mat4f lodProj = new Mat4f(mcProjMat); @@ -245,12 +253,31 @@ public class RenderUtil //region - public static int getFarClipPlaneDistanceInBlocks() + public static float getFarClipPlaneDistanceInBlocks() { - int lodChunkDist = Config.Client.Advanced.Graphics.Quality.lodChunkRenderDistanceRadius.get(); - int lodBlockDist = lodChunkDist * LodUtil.CHUNK_WIDTH; - // * 2 to prevent clipping when high above the world - return (lodBlockDist + LodUtil.REGION_WIDTH) * 2; + if (IRIS_ACCESSOR != null) + { + // Iris doesn't use the far clip plane DH generates, instead + // they use a manually generated one, which causes problems. + // This is a hack so DH's far clip plane matches up with what Iris thinks it is, + // fixing projection/depth mapping. + // https://github.com/IrisShaders/Iris/issues/2534 + + int lodChunkDist = DhApi.Delayed.configs.graphics().chunkRenderDistance().getValue(); + int lodBlockDist = lodChunkDist * 16; /* 16 = chunk width in blocks */ + // sqrt 2 to prevent the corners from being cut off + return (float) ((lodBlockDist + 512 /* 512 = region width in blocks */) * Math.sqrt(2)); + } + else + { + // Current DH logic + // uses a farther depth to help when far above the world + + int lodChunkDist = Config.Client.Advanced.Graphics.Quality.lodChunkRenderDistanceRadius.get(); + int lodBlockDist = lodChunkDist * LodUtil.CHUNK_WIDTH; + // * 2 to prevent clipping when high above the world + return (lodBlockDist + LodUtil.REGION_WIDTH) * 2; + } } //endregion