From f041f79ae34b738d6d354f3822e3ec3059e39de8 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Sun, 24 Oct 2021 22:17:57 -0500 Subject: [PATCH] Close #78 (Add a config to disable vanilla MC's fog) And change the config to use FAR fog and disable MC's fog by default. --- .../java/com/seibel/lod/config/LodConfig.java | 17 +++++++++-- .../lod/objects/NearFarFogSettings.java | 2 +- .../com/seibel/lod/proxy/ClientProxy.java | 6 ++-- .../com/seibel/lod/render/LodRenderer.java | 30 ++++++++++++------- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/seibel/lod/config/LodConfig.java b/src/main/java/com/seibel/lod/config/LodConfig.java index f253e5921..f2ba59df8 100644 --- a/src/main/java/com/seibel/lod/config/LodConfig.java +++ b/src/main/java/com/seibel/lod/config/LodConfig.java @@ -51,8 +51,9 @@ import net.minecraftforge.fml.config.ModConfig; /** * This handles any configuration the user has access to. + * @author Leonardo Amato * @author James Seibel - * @version 10-23-2021 + * @version 10-24-2021 */ @Mod.EventBusSubscriber public class LodConfig @@ -188,6 +189,8 @@ public class LodConfig public final ForgeConfigSpec.EnumValue fogDrawOverride; + public final ForgeConfigSpec.BooleanValue disableVanillaFog; + FogQualityOption(ForgeConfigSpec.Builder builder) { @@ -198,7 +201,7 @@ public class LodConfig + " At what distance should Fog be drawn on the fake chunks? \n" + " If the fog cuts off abruptly or you are using Optifine's \"fast\" fog option \n" + " set this to " + FogDistance.NEAR + " or " + FogDistance.FAR + ". \n") - .defineEnum("Fog Distance", FogDistance.NEAR_AND_FAR); + .defineEnum("Fog Distance", FogDistance.FAR); fogDrawOverride = builder .comment("\n\n" @@ -208,6 +211,16 @@ public class LodConfig + " " + FogDrawOverride.FAST + ": Always draw fast fog on the LODs \n" + " " + FogDrawOverride.FANCY + ": Always draw fancy fog on the LODs (if your graphics card supports it) \n") .defineEnum("Fog Draw Override", FogDrawOverride.FANCY); + + disableVanillaFog = builder + .comment("\n\n" + + " If true disable vanilla Minecraft's fog. \n\n" + + "" + + " Unlike Optifine or Sodium's fog disabling option this won't change \n" + + " performance (we don't actually disable the fog, we just tell it to render a infinite distance away). \n" + + " May or may not play nice with other mods edit fog. \n") + .define("Disable Vanilla Fog", true); + builder.pop(); } } diff --git a/src/main/java/com/seibel/lod/objects/NearFarFogSettings.java b/src/main/java/com/seibel/lod/objects/NearFarFogSettings.java index 194ab2a60..3c25c59c6 100644 --- a/src/main/java/com/seibel/lod/objects/NearFarFogSettings.java +++ b/src/main/java/com/seibel/lod/objects/NearFarFogSettings.java @@ -36,7 +36,7 @@ public class NearFarFogSettings /** * If true that means Minecraft is - * rendering fog alongside us + * rendering fog */ public boolean vanillaIsRenderingFog = true; diff --git a/src/main/java/com/seibel/lod/proxy/ClientProxy.java b/src/main/java/com/seibel/lod/proxy/ClientProxy.java index ba10a96fb..644531783 100644 --- a/src/main/java/com/seibel/lod/proxy/ClientProxy.java +++ b/src/main/java/com/seibel/lod/proxy/ClientProxy.java @@ -173,9 +173,11 @@ public class ClientProxy // LodConfig.CLIENT.worldGenerator.lodQualityMode.set(VerticalQuality.VOXEL); // LodConfig.CLIENT.graphics.fogQualityOption.fogDistance.set(FogDistance.FAR); -// LodConfig.CLIENT.graphics.fogDrawOverride.set(FogDrawOverride.ALWAYS_DRAW_FOG_FANCY); +// LodConfig.CLIENT.graphics.fogQualityOption.fogDrawOverride.set(FogDrawOverride.FANCY); +// LodConfig.CLIENT.graphics.fogQualityOption.disableVanillaFog.set(true); // LodConfig.CLIENT.graphics.shadingMode.set(ShadingMode.DARKEN_SIDES); -// LodConfig.CLIENT.graphics.vanillaOverdraw.set(VanillaOverdraw.HALF); + +// LodConfig.CLIENT.graphics.advancedGraphicsOption.vanillaOverdraw.set(VanillaOverdraw.DYNAMIC); // LodConfig.CLIENT.graphics.advancedGraphicsOption.gpuUploadMethod.set(GpuUploadMethod.BUFFER_STORAGE); diff --git a/src/main/java/com/seibel/lod/render/LodRenderer.java b/src/main/java/com/seibel/lod/render/LodRenderer.java index a856e4c2a..6d869c19c 100644 --- a/src/main/java/com/seibel/lod/render/LodRenderer.java +++ b/src/main/java/com/seibel/lod/render/LodRenderer.java @@ -48,7 +48,6 @@ import com.seibel.lod.util.LodUtil; import com.seibel.lod.wrappers.MinecraftWrapper; import net.minecraft.client.renderer.ActiveRenderInfo; -import net.minecraft.client.renderer.FogRenderer; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.texture.NativeImage; import net.minecraft.client.renderer.vertex.VertexBuffer; @@ -393,8 +392,7 @@ public class LodRenderer { if (fogQuality == FogQuality.OFF) { - FogRenderer.setupNoFog(); - RenderSystem.disableFog(); + GL15.glDisable(GL15.GL_FOG); return; } @@ -466,7 +464,10 @@ public class LodRenderer GL15.glFogi(NVFogDistance.GL_FOG_DISTANCE_MODE_NV, glFogDistanceMode); } - /** Revert any changes that were made to the fog. */ + /** + * Revert any changes that were made to the fog + * and sets up the fog for Minecraft. + */ @SuppressWarnings("deprecation") private void cleanupFog(NearFarFogSettings fogSettings, float defaultFogStartDist, float defaultFogEndDist, @@ -480,13 +481,22 @@ public class LodRenderer if (GlProxy.getInstance().fancyFogAvailable) GL15.glFogi(NVFogDistance.GL_FOG_DISTANCE_MODE_NV, defaultFogDistance); - // disable fog if Minecraft wasn't rendering fog, - // but we were - if (!fogSettings.vanillaIsRenderingFog && - (fogSettings.near.quality != FogQuality.OFF || - fogSettings.far.quality != FogQuality.OFF)) + // disable fog if Minecraft wasn't rendering fog + // or we want it disabled + if (!fogSettings.vanillaIsRenderingFog + || LodConfig.CLIENT.graphics.fogQualityOption.disableVanillaFog.get()) { - GL15.glDisable(GL15.GL_FOG); + // Make fog render a infinite distance away. + // This doesn't technically disable Minecraft's fog + // so performance will probably be the same regardless, unlike + // Optifine's no fog setting. + + // we can't disable minecraft's fog outright because by default + // minecraft will re-enable the fog after our code + + RenderSystem.fogStart(0.0F); + RenderSystem.fogEnd(Float.MAX_VALUE); + RenderSystem.fogDensity(0.0F); } }