re-add vanilla fading

This commit is contained in:
James Seibel
2026-02-28 11:34:39 -06:00
parent c6a4355718
commit 1a2c0b0be1
10 changed files with 131 additions and 49 deletions
@@ -20,6 +20,7 @@
package com.seibel.distanthorizons.core.api.internal;
import com.seibel.distanthorizons.api.DhApi;
import com.seibel.distanthorizons.api.enums.config.EDhApiMcRenderingFadeMode;
import com.seibel.distanthorizons.api.enums.rendering.EDhApiRenderPass;
import com.seibel.distanthorizons.api.methods.events.abstractEvents.*;
import com.seibel.distanthorizons.core.api.internal.rendering.DhRenderState;
@@ -37,6 +38,7 @@ import com.seibel.distanthorizons.core.util.objects.Pair;
import com.seibel.distanthorizons.core.util.objects.RollingAverage;
import com.seibel.distanthorizons.core.util.threading.ThreadPoolUtil;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
import com.seibel.distanthorizons.core.wrapperInterfaces.render.IMcFadeRenderer;
import com.seibel.distanthorizons.core.wrapperInterfaces.render.IMcTestRenderer;
import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector;
import com.seibel.distanthorizons.core.config.Config;
@@ -643,28 +645,27 @@ public class ClientApi
*/
public void renderFadeOpaque()
{
//IMcFadeRenderer fadeRenderer = SingletonInjector.INSTANCE.get(IMcFadeRenderer.class);
//if (fadeRenderer == null)
//{
// return;
//}
//fadeRenderer.render();
IMcFadeRenderer fadeRenderer = SingletonInjector.INSTANCE.get(IMcFadeRenderer.class);
if (fadeRenderer == null)
{
return;
}
//// only fade when DH is rendering
//if (Config.Client.Advanced.Debugging.rendererMode.get() != EDhApiRendererMode.DISABLED
// &&
// (
// // only fade when requested
// Config.Client.Advanced.Graphics.Quality.vanillaFadeMode.get() == EDhApiMcRenderingFadeMode.DOUBLE_PASS
// // or if LOD-only mode is enabled (fading is used to remove the MC render pass)
// || Config.Client.Advanced.Debugging.lodOnlyMode.get()
// )
// // don't fade when Iris shaders are active, otherwise the rendering can get weird
// && !DhApiRenderProxy.INSTANCE.getDeferTransparentRendering())
//{
// VanillaFadeRenderer.INSTANCE.render(RENDER_STATE.mcModelViewMatrix, RENDER_STATE.mcProjectionMatrix, RENDER_STATE.partialTickTime, RENDER_STATE.clientLevelWrapper);
//}
// only fade when DH is rendering
if (Config.Client.Advanced.Debugging.rendererMode.get() != EDhApiRendererMode.DISABLED
&&
(
// only fade when requested
Config.Client.Advanced.Graphics.Quality.vanillaFadeMode.get() == EDhApiMcRenderingFadeMode.DOUBLE_PASS
// or if LOD-only mode is enabled (fading is used to remove the MC render pass)
|| Config.Client.Advanced.Debugging.lodOnlyMode.get()
)
// don't fade when Iris shaders are active, otherwise the rendering can get weird
&& !DhApiRenderProxy.INSTANCE.getDeferTransparentRendering())
{
fadeRenderer.render(RENDER_STATE.mcModelViewMatrix, RENDER_STATE.mcProjectionMatrix, RENDER_STATE.clientLevelWrapper);
//VanillaFadeRenderer.INSTANCE.render(RENDER_STATE.mcModelViewMatrix, RENDER_STATE.mcProjectionMatrix, RENDER_STATE.partialTickTime, RENDER_STATE.clientLevelWrapper);
}
}
/**
* The second fade pass.
@@ -673,25 +674,30 @@ public class ClientApi
*/
public void renderFadeTransparent()
{
IMcFadeRenderer fadeRenderer = SingletonInjector.INSTANCE.get(IMcFadeRenderer.class);
if (fadeRenderer == null)
{
return;
}
//// only fade when DH is rendering
//if (Config.Client.Advanced.Debugging.rendererMode.get() != EDhApiRendererMode.DISABLED)
//{
// boolean renderFade =
// (
// // only fade when requested
// Config.Client.Advanced.Graphics.Quality.vanillaFadeMode.get() != EDhApiMcRenderingFadeMode.NONE
// // or if LOD-only mode is enabled (fading is used to remove the MC render pass)
// || Config.Client.Advanced.Debugging.lodOnlyMode.get()
// )
// // don't fade when Iris shaders are active, otherwise the rendering can get weird
// && !DhApiRenderProxy.INSTANCE.getDeferTransparentRendering();
// if (renderFade)
// {
// VanillaFadeRenderer.INSTANCE.render(RENDER_STATE.mcModelViewMatrix, RENDER_STATE.mcProjectionMatrix, RENDER_STATE.partialTickTime, RENDER_STATE.clientLevelWrapper);
// }
//}
// only fade when DH is rendering
if (Config.Client.Advanced.Debugging.rendererMode.get() != EDhApiRendererMode.DISABLED)
{
boolean renderFade =
(
// only fade when requested
Config.Client.Advanced.Graphics.Quality.vanillaFadeMode.get() != EDhApiMcRenderingFadeMode.NONE
// or if LOD-only mode is enabled (fading is used to remove the MC render pass)
|| Config.Client.Advanced.Debugging.lodOnlyMode.get()
)
// don't fade when Iris shaders are active, otherwise the rendering can get weird
&& !DhApiRenderProxy.INSTANCE.getDeferTransparentRendering();
if (renderFade)
{
fadeRenderer.render(RENDER_STATE.mcModelViewMatrix, RENDER_STATE.mcProjectionMatrix, RENDER_STATE.clientLevelWrapper);
//VanillaFadeRenderer.INSTANCE.render(RENDER_STATE.mcModelViewMatrix, RENDER_STATE.mcProjectionMatrix, RENDER_STATE.partialTickTime, RENDER_STATE.clientLevelWrapper);
}
}
}
///endregion
@@ -157,6 +157,10 @@ public class McLodRenderer
if (!runningDeferredPass)
{
lodRenderer.clearColor();
lodRenderer.clearDepth();
//=========================//
// opaque and non-deferred //
// transparent rendering //
@@ -235,8 +239,6 @@ public class McLodRenderer
//DebugRenderer.INSTANCE.render(combinedMatrix);
}
lodRenderer.clearDepth();
}
else
{
@@ -326,6 +328,8 @@ public class McLodRenderer
lodRenderer.render(renderEventParam, opaquePass, modelPos, vbos, profilerWrapper);
}
}
lodRenderer.applyToMcTexture();
}
else
{
@@ -19,11 +19,14 @@
package com.seibel.distanthorizons.core.wrapperInterfaces.render;
import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiRenderParam;
import com.seibel.distanthorizons.core.util.math.Mat4f;
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
import com.seibel.distanthorizons.coreapi.interfaces.dependencyInjection.IBindable;
public interface IMcFadeRenderer extends IBindable
{
void render();
void render(Mat4f mcModelViewMatrix, Mat4f mcProjectionMatrix, IClientLevelWrapper level);
}
@@ -33,6 +33,8 @@ public interface IMcLodRenderer extends IBindable
int getVertexSize();
void applyToMcTexture();
void clearDepth();
void clearColor();
}
@@ -0,0 +1,29 @@
#version 150 core
in vec2 TexCoord;
out vec4 fragColor;
uniform sampler2D uDhColorTexture;
uniform sampler2D uDhDepthTexture;
// DH apply frag
void main()
{
//fragColor = texture(uApplyTexture, TexCoord);
fragColor = vec4(0.0);
// a fragment depth of "1" means the fragment wasn't drawn to,
// only update fragments that were drawn to
float fragmentDepth = texture(uDhDepthTexture, TexCoord).r;
if (fragmentDepth != 1)
{
fragColor = texture(uDhColorTexture, TexCoord);
}
else
{
// use the original MC texture if no LODs were drawn to this fragment
discard;
}
}
@@ -0,0 +1,12 @@
#version 150 core
in vec2 vPosition;
out vec2 TexCoord;
// DH apply
void main()
{
gl_Position = vec4(vPosition, 0.0, 1.0);
TexCoord = vPosition.xy * 0.5 + 0.5;
}
@@ -0,0 +1,13 @@
#version 150 core
in vec2 TexCoord;
out vec4 fragColor;
uniform sampler2D uCopyTexture;
// DH copy frag
void main()
{
fragColor = texture(uCopyTexture, TexCoord);
}
@@ -0,0 +1,12 @@
#version 150 core
in vec2 vPosition;
out vec2 TexCoord;
// DH copy
void main()
{
gl_Position = vec4(vPosition, 0.0, 1.0);
TexCoord = vPosition.xy * 0.5 + 0.5;
}
@@ -5,21 +5,22 @@ in vec2 TexCoord;
out vec4 fragColor;
uniform sampler2D uMcDepthTexture;
uniform sampler2D uDhDepthTexture;
uniform sampler2D uCombinedMcDhColorTexture;
uniform sampler2D uDhDepthTexture;
uniform sampler2D uDhColorTexture;
layout (std140) uniform fragUniformBlock
{
// inverted model view matrix and projection matrix
mat4 uDhInvMvmProj;
mat4 uMcInvMvmProj;
bool uOnlyRenderLods;
float uStartFadeBlockDistance;
float uEndFadeBlockDistance;
float uMaxLevelHeight;
bool uOnlyRenderLods;
// inverted model view matrix and projection matrix
mat4 uDhInvMvmProj;
mat4 uMcInvMvmProj;
};