diff --git a/src/main/java/com/seibel/lod/core/render/LodRenderProgram.java b/src/main/java/com/seibel/lod/core/render/LodRenderProgram.java index 288891249..65b1eac06 100644 --- a/src/main/java/com/seibel/lod/core/render/LodRenderProgram.java +++ b/src/main/java/com/seibel/lod/core/render/LodRenderProgram.java @@ -135,9 +135,15 @@ public class LodRenderProgram extends ShaderProgram { setUniform(lightMapUniform, lightmapBindPoint); } - public void fillUniformDataForFog(LodFogConfig fogSettings) { + public void fillUniformDataForFog(LodFogConfig fogSettings, boolean isUnderWater) { super.bind(); - if (fogSettings.fogDrawMode != FogDrawMode.FOG_DISABLED) { + if (isUnderWater) { + setUniform(fogEnabledUniform, true); + setUniform(nearFogEnabledUniform, false); + setUniform(farFogEnabledUniform, true); + setUniform(farFogStartUniform, 0.0f); + setUniform(farFogEndUniform, 0.0f); + } else if (fogSettings.fogDrawMode != FogDrawMode.FOG_DISABLED) { setUniform(fogEnabledUniform, true); setUniform(nearFogEnabledUniform, fogSettings.fogDistance != FogDistance.FAR); setUniform(farFogEnabledUniform, fogSettings.fogDistance != FogDistance.NEAR); diff --git a/src/main/java/com/seibel/lod/core/render/LodRenderer.java b/src/main/java/com/seibel/lod/core/render/LodRenderer.java index 5cfeca9ba..8ee46b275 100644 --- a/src/main/java/com/seibel/lod/core/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/core/render/LodRenderer.java @@ -270,9 +270,9 @@ public class LodRenderer /*---------Fill uniform data--------*/ // Fill the uniform data. Note: GL33.GL_TEXTURE0 == texture bindpoint 0 shaderProgram.fillUniformData(modelViewMatrix, projectionMatrix, getTranslatedCameraPos(), - getFogColor(), (int) (MC.getSkyDarken(partialTicks) * 15), 0); + MC_RENDER.isFogStateInUnderWater() ? getUnderWaterFogColor(partialTicks) : getFogColor(partialTicks), (int) (MC.getSkyDarken(partialTicks) * 15), 0); // Previous guy said fog setting may be different from region to region, but the fogSettings never changed... soooooo... - shaderProgram.fillUniformDataForFog(fogSettings); + shaderProgram.fillUniformDataForFog(fogSettings, MC_RENDER.isFogStateInUnderWater()); // Note: Since lightmapTexture is changing every frame, it's faster to recreate it than to reuse the old one. lightmapTexture.fillData(MC_RENDER.getLightmapTextureWidth(), MC_RENDER.getLightmapTextureHeight(), MC_RENDER.getLightmapPixels()); @@ -370,17 +370,21 @@ public class LodRenderer lodBufferBuilderFactory.setupBuffers(lodDim); } - private Color getFogColor() + private Color getFogColor(float partialTicks) { Color fogColor; if (CONFIG.client().graphics().fogQuality().getFogColorMode() == FogColorMode.USE_SKY_COLOR) fogColor = MC_RENDER.getSkyColor(); else - fogColor = MC_RENDER.getFogColor(); + fogColor = MC_RENDER.getFogColor(partialTicks); return fogColor; } + private Color getUnderWaterFogColor(float partialTicks) + { + return MC_RENDER.getUnderWaterFogColor(partialTicks); + } /** * Translate the camera relative to the LodDimension's center, diff --git a/src/main/java/com/seibel/lod/core/wrapperInterfaces/minecraft/IMinecraftRenderWrapper.java b/src/main/java/com/seibel/lod/core/wrapperInterfaces/minecraft/IMinecraftRenderWrapper.java index 982b02a89..89eaa3438 100644 --- a/src/main/java/com/seibel/lod/core/wrapperInterfaces/minecraft/IMinecraftRenderWrapper.java +++ b/src/main/java/com/seibel/lod/core/wrapperInterfaces/minecraft/IMinecraftRenderWrapper.java @@ -51,7 +51,9 @@ public interface IMinecraftRenderWrapper double getGamma(); - Color getFogColor(); + Color getFogColor(float partialTicks); + + default Color getUnderWaterFogColor(float partialTicks) {return getFogColor(partialTicks);} Color getSkyColor(); @@ -131,4 +133,8 @@ public interface IMinecraftRenderWrapper public default boolean tryDisableVanillaFog() { return false; } + + public default boolean isFogStateInUnderWater() { + return false; + } }