Fog shader should be working

This commit is contained in:
coolGi
2023-08-02 23:23:06 +09:30
parent a724938f71
commit 3ea55065b3
4 changed files with 48 additions and 35 deletions
@@ -252,11 +252,11 @@ public class LodRenderer
bufferHandler.renderOpaque(this);
if (Config.Client.Advanced.Graphics.Quality.ssao.get()) {
// SSAOShader.INSTANCE.render(partialTicks);
// SSAOShader.INSTANCE.render(partialTicks); // For some reason this looks slightly different :/
SSAORenderer.INSTANCE.render(partialTicks);
}
{
// FogShader.INSTANCE.render(partialTicks);
FogShader.INSTANCE.render(partialTicks);
// DarkShader.INSTANCE.render(partialTicks); // A test shader to make the world darker
}
@@ -24,6 +24,9 @@ public class FogShader extends AbstractShaderRenderer {
// public final int modelOffsetUniform;
// public final int worldYOffsetUniform;
public final int gProjUniform;
public final int gDepthMapUniform;
// Fog Uniforms
public final int fogColorUniform;
public final int fogScaleUniform;
@@ -37,13 +40,16 @@ public class FogShader extends AbstractShaderRenderer {
// This code is just a temp fix so that it looks fine for the time being
// and even with the jank soloution, i cannot get it to work
super(new ShaderProgram(
() -> Shader.loadFile("shaders/fog/fog.vert", false, new StringBuilder()).toString(),
() -> Shader.loadFile("shaders/normal.vert", false, new StringBuilder()).toString(),
() -> fogConfig.loadAndProcessFragShader("shaders/fog/fog.frag", false).toString(),
"fragColor", new String[] { "vPos", "vPosition" }
"fragColor", new String[] { "vPosition" }
));
// modelOffsetUniform = this.shader.getUniformLocation("modelOffset");
// worldYOffsetUniform = this.shader.tryGetUniformLocation("worldYOffset");
gProjUniform = this.shader.getUniformLocation("gProj");
gDepthMapUniform = this.shader.getUniformLocation("gDepthMap");
// Fog uniforms
fogColorUniform = this.shader.getUniformLocation("fogColor");
fullFogModeUniform = this.shader.getUniformLocation("fullFogMode");
@@ -56,8 +62,7 @@ public class FogShader extends AbstractShaderRenderer {
@Override
void setVertexAttributes() {
this.va.setVertexAttribute(0, 0, VertexAttribute.VertexPointer.addVec2Pointer(false));
this.va.setVertexAttribute(0, 1, VertexAttribute.VertexPointer.addUnsignedShortsPointer(8, false, true)); // 2+2+2+2
va.setVertexAttribute(0, 0, VertexAttribute.VertexPointer.addVec2Pointer(false));
};
@Override
@@ -68,8 +73,19 @@ public class FogShader extends AbstractShaderRenderer {
vanillaDrawDistance += 32; // Give it a 2 chunk boundary for near fog.
Mat4f perspective = Mat4f.perspective(
(float) MC_RENDER.getFov(partialTicks),
MC_RENDER.getTargetFrameBufferViewportWidth() / (float) MC_RENDER.getTargetFrameBufferViewportHeight(),
RenderUtil.getNearClipPlaneDistanceInBlocks(partialTicks),
(float) ((lodDrawDistance + LodUtil.REGION_WIDTH) * Math.sqrt(2)));
// if (worldYOffsetUniform != -1) this.shader.setUniform(worldYOffsetUniform, (float) MC.getWrappedClientWorld().getMinHeight());
this.shader.setUniform(this.shader.getUniformLocation("gProj"), perspective);
GL32.glUniform1i(gDepthMapUniform, 0);
// Fog
this.shader.setUniform(fullFogModeUniform, MC_RENDER.isFogStateSpecial() ? 1 : 0);
this.shader.setUniform(fogColorUniform, MC_RENDER.isFogStateSpecial() ? getSpecialFogColor(partialTicks) : getFogColor(partialTicks));
+26 -7
View File
@@ -1,11 +1,14 @@
in vec3 vertexWorldPos;
in vec2 TexCoord;
in float vertexYPos;
//in uvec4 vPosition;
//in vec2 TexCoord;
out vec4 fragColor;
uniform sampler2D gDepthMap;
uniform mat4 gProj;
uniform float fogScale;
uniform float fogVerticalScale;
@@ -43,6 +46,20 @@ float mod(float x, int y) {
}
vec3 calcViewPosition(vec2 coords) {
float fragmentDepth = texture(gDepthMap, coords).r;
vec4 ndc = vec4(
coords.x * 2.0 - 1.0,
coords.y * 2.0 - 1.0,
fragmentDepth * 2.0 - 1.0,
1.0
);
vec4 vs_pos = inverse(gProj) * ndc;
vs_pos.xyz = vs_pos.xyz / vs_pos.w;
return vs_pos.xyz;
}
/**
* Fragment shader for fog.
@@ -51,6 +68,8 @@ float mod(float x, int y) {
* version: 2023-6-21
*/
void main() {
vec3 vertexWorldPos = calcViewPosition(TexCoord);
if (fullFogMode != 0) {
fragColor = vec4(fogColor.r, fogColor.g, fogColor.b, 1.);
} else {
@@ -71,12 +90,12 @@ void main() {
// Testing
if (fragColor.r != 6969.) { // This line is so that the compiler doesnt delete the previos code
fragColor = vec4(
mod(vertexWorldPos.x, 1),
mod(vertexWorldPos.y, 1),
mod(vertexWorldPos.z, 1),
1.
);
// fragColor = vec4(
// mod(vertexWorldPos.x, 1),
// mod(vertexWorldPos.y, 1),
// mod(vertexWorldPos.z, 1),
// 1.
// );
// fragColor = vec4(
// mod(vPosition.x, 1),
// mod(vPosition.y, 1),
@@ -1,22 +0,0 @@
#version 150 core
//uniform vec3 modelOffset;
//uniform float worldYOffset;
//in uvec4 vPosition;
in vec2 vPos;
out vec3 vertexWorldPos;
out float vertexYPos;
void main()
{
// vertexWorldPos = vPosition.xyz + modelOffset;
// vertexWorldPos = vPosition.xyz;
vertexWorldPos = vec3(0.);
vertexYPos = 0.;
// vertexYPos = vPosition.y + worldYOffset;
gl_Position = vec4(vPos, 1.0, 1.0);
}