LodRenderer: Add support for underwater fog
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
+7
-1
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user