diff --git a/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientApi.java b/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientApi.java index 682f842df..bc60eb930 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientApi.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/api/internal/ClientApi.java @@ -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 diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/McLodRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/McLodRenderer.java index 85a9b19a3..9d4cd0cf8 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/McLodRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/McLodRenderer.java @@ -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 { diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/IMcFadeRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/IMcFadeRenderer.java index 4180fc986..fd372f4f6 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/IMcFadeRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/IMcFadeRenderer.java @@ -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); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/IMcLodRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/IMcLodRenderer.java index dbcadf849..3810c2ac7 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/IMcLodRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/render/IMcLodRenderer.java @@ -33,6 +33,8 @@ public interface IMcLodRenderer extends IBindable int getVertexSize(); + void applyToMcTexture(); void clearDepth(); + void clearColor(); } diff --git a/core/src/main/resources/assets/distanthorizons/shaders/apply/frag.fsh b/core/src/main/resources/assets/distanthorizons/shaders/apply/frag.fsh new file mode 100644 index 000000000..c5a5d3635 --- /dev/null +++ b/core/src/main/resources/assets/distanthorizons/shaders/apply/frag.fsh @@ -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; + } +} \ No newline at end of file diff --git a/core/src/main/resources/assets/distanthorizons/shaders/apply/vert.vsh b/core/src/main/resources/assets/distanthorizons/shaders/apply/vert.vsh new file mode 100644 index 000000000..09789a24b --- /dev/null +++ b/core/src/main/resources/assets/distanthorizons/shaders/apply/vert.vsh @@ -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; +} \ No newline at end of file diff --git a/core/src/main/resources/assets/distanthorizons/shaders/copy/frag.fsh b/core/src/main/resources/assets/distanthorizons/shaders/copy/frag.fsh new file mode 100644 index 000000000..9cbaf97f2 --- /dev/null +++ b/core/src/main/resources/assets/distanthorizons/shaders/copy/frag.fsh @@ -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); +} \ No newline at end of file diff --git a/core/src/main/resources/assets/distanthorizons/shaders/copy/vert.vsh b/core/src/main/resources/assets/distanthorizons/shaders/copy/vert.vsh new file mode 100644 index 000000000..d9b009b3b --- /dev/null +++ b/core/src/main/resources/assets/distanthorizons/shaders/copy/vert.vsh @@ -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; +} \ No newline at end of file diff --git a/core/src/main/resources/assets/distanthorizons/shaders/fade/frag.fsh b/core/src/main/resources/assets/distanthorizons/shaders/fade/depth_test.fsh similarity index 100% rename from core/src/main/resources/assets/distanthorizons/shaders/fade/frag.fsh rename to core/src/main/resources/assets/distanthorizons/shaders/fade/depth_test.fsh diff --git a/core/src/main/resources/assets/distanthorizons/shaders/fade/vanillaFade.fsh b/core/src/main/resources/assets/distanthorizons/shaders/fade/vanilla_fade.fsh similarity index 99% rename from core/src/main/resources/assets/distanthorizons/shaders/fade/vanillaFade.fsh rename to core/src/main/resources/assets/distanthorizons/shaders/fade/vanilla_fade.fsh index 186ef51e2..da8d123ae 100644 --- a/core/src/main/resources/assets/distanthorizons/shaders/fade/vanillaFade.fsh +++ b/core/src/main/resources/assets/distanthorizons/shaders/fade/vanilla_fade.fsh @@ -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; };