diff --git a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiShadowCullingFrustum.java b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiShadowCullingFrustum.java index 9fdd6cef3..5759587a0 100644 --- a/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiShadowCullingFrustum.java +++ b/api/src/main/java/com/seibel/distanthorizons/api/interfaces/override/rendering/IDhApiShadowCullingFrustum.java @@ -26,7 +26,10 @@ import com.seibel.distanthorizons.coreapi.util.math.Mat4f; /** * The culling frustum used during Distant Horizons' shadow pass * if another mod has enabled Distant Horizons' shadow - * pass via the API. + * pass via the API.

+ * + * If no {@link IDhApiShadowCullingFrustum} is bound then culling + * will not be done in the shadow pass. * * @see IDhApiCullingFrustum * diff --git a/core/src/main/java/com/seibel/distanthorizons/core/pos/DhFrustumBounds.java b/core/src/main/java/com/seibel/distanthorizons/core/render/DhFrustumBounds.java similarity index 97% rename from core/src/main/java/com/seibel/distanthorizons/core/pos/DhFrustumBounds.java rename to core/src/main/java/com/seibel/distanthorizons/core/render/DhFrustumBounds.java index 62d3aac75..cf18751b8 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/pos/DhFrustumBounds.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/DhFrustumBounds.java @@ -1,4 +1,4 @@ -package com.seibel.distanthorizons.core.pos; +package com.seibel.distanthorizons.core.render; import com.seibel.distanthorizons.api.interfaces.override.rendering.IDhApiCullingFrustum; import com.seibel.distanthorizons.coreapi.interfaces.dependencyInjection.IOverrideInjector; diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/NeverCullFrustum.java b/core/src/main/java/com/seibel/distanthorizons/core/render/NeverCullFrustum.java new file mode 100644 index 000000000..971b03b50 --- /dev/null +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/NeverCullFrustum.java @@ -0,0 +1,40 @@ +package com.seibel.distanthorizons.core.render; + +import com.seibel.distanthorizons.api.interfaces.override.rendering.IDhApiCullingFrustum; +import com.seibel.distanthorizons.coreapi.interfaces.dependencyInjection.IOverrideInjector; +import com.seibel.distanthorizons.coreapi.util.math.Mat4f; + +/** + * Dummy {@link IDhApiCullingFrustum} that allows everything through.
+ * Useful when a frustum is required, but culling shouldn't be done. + */ +public class NeverCullFrustum implements IDhApiCullingFrustum +{ + //=============// + // constructor // + //=============// + + public NeverCullFrustum() { } + + + + //=========// + // methods // + //=========// + + @Override + public void update(int worldMinBlockY, int worldMaxBlockY, Mat4f dhWorldViewProjection) { /* update isn't needed */ } + + @Override + public boolean intersects(int lodBlockPosMinX, int lodBlockPosMinZ, int lodBlockWidth, int lodDetailLevel) { return true; } + + + + //=====================// + // overridable methods // + //=====================// + + @Override + public int getPriority() { return IOverrideInjector.CORE_PRIORITY; } + +} 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 8e47270f0..8fb1da7a4 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 @@ -20,7 +20,6 @@ package com.seibel.distanthorizons.core.render; import com.seibel.distanthorizons.api.DhApi; -import com.seibel.distanthorizons.api.interfaces.override.IDhApiOverrideable; import com.seibel.distanthorizons.api.interfaces.override.rendering.IDhApiCullingFrustum; import com.seibel.distanthorizons.api.interfaces.override.rendering.IDhApiShadowCullingFrustum; import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam; @@ -30,7 +29,6 @@ import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.enums.EDhDirection; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.logging.f3.F3Screen; -import com.seibel.distanthorizons.core.pos.DhFrustumBounds; import com.seibel.distanthorizons.core.pos.DhLodPos; import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.core.pos.Pos2D; @@ -91,12 +89,20 @@ public class RenderBufferHandler implements AutoCloseable { this.lodQuadTree = lodQuadTree; - IDhApiCullingFrustum coreFrustum = DhApi.overrides.get(IDhApiCullingFrustum.class, IOverrideInjector.CORE_PRIORITY); - if (coreFrustum == null) + IDhApiCullingFrustum coreCameraFrustum = DhApi.overrides.get(IDhApiCullingFrustum.class, IOverrideInjector.CORE_PRIORITY); + if (coreCameraFrustum == null) { DhApi.overrides.bind(IDhApiCullingFrustum.class, new DhFrustumBounds()); } + // by default the shadow pass shouldn't have any frustum culling + IDhApiShadowCullingFrustum coreShadowFrustum = DhApi.overrides.get(IDhApiShadowCullingFrustum.class, IOverrideInjector.CORE_PRIORITY); + if (coreShadowFrustum == null) + { + DhApi.overrides.bind(IDhApiShadowCullingFrustum.class, new NeverCullFrustum()); + } + + this.f3Message = new F3Screen.MultiDynamicMessage( () -> { @@ -260,11 +266,6 @@ public class RenderBufferHandler implements AutoCloseable enableFrustumCulling = !Config.Client.Advanced.Graphics.AdvancedGraphics.disableFrustumCulling.get(); frustum = DhApi.overrides.get(IDhApiCullingFrustum.class); } - // use the core frustum if no override is present - if (frustum == null) - { - frustum = DhApi.overrides.get(IDhApiCullingFrustum.class, IOverrideInjector.CORE_PRIORITY); - } // update the frustum if necessary