aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/makamys/neodymium/renderer/NeoRenderer.java4
-rw-r--r--src/main/resources/shaders/chunk.vert7
2 files changed, 10 insertions, 1 deletions
diff --git a/src/main/java/makamys/neodymium/renderer/NeoRenderer.java b/src/main/java/makamys/neodymium/renderer/NeoRenderer.java
index 6a1c1e9..8d15eed 100644
--- a/src/main/java/makamys/neodymium/renderer/NeoRenderer.java
+++ b/src/main/java/makamys/neodymium/renderer/NeoRenderer.java
@@ -332,6 +332,8 @@ public class NeoRenderer {
int u_projInv = glGetUniformLocation(shaderProgram, "projInv");
int u_fogColor = glGetUniformLocation(shaderProgram, "fogColor");
int u_fogStartEnd = glGetUniformLocation(shaderProgram, "fogStartEnd");
+ int u_fogMode = glGetUniformLocation(shaderProgram, "fogMode");
+ int u_fogDensity = glGetUniformLocation(shaderProgram, "fogDensity");
glUniformMatrix4(u_modelView, false, modelView);
glUniformMatrix4(u_proj, false, projBuf);
@@ -339,6 +341,8 @@ public class NeoRenderer {
glUniform4f(u_viewport, viewportBuf.get(0),viewportBuf.get(1),viewportBuf.get(2),viewportBuf.get(3));
glUniform4(u_fogColor, fogColorBuf);
glUniform2(u_fogStartEnd, fogStartEnd);
+ glUniform1i(u_fogMode, glGetInteger(GL_FOG_MODE));
+ glUniform1f(u_fogDensity, glGetFloat(GL_FOG_DENSITY));
glUniform3f(u_playerPos, (float)eyePosX, (float)eyePosY, (float)eyePosZ);
diff --git a/src/main/resources/shaders/chunk.vert b/src/main/resources/shaders/chunk.vert
index 823b546..f983323 100644
--- a/src/main/resources/shaders/chunk.vert
+++ b/src/main/resources/shaders/chunk.vert
@@ -14,6 +14,8 @@ uniform mat4 projInv;
uniform vec4 viewport;
uniform vec4 fogColor;
uniform vec2 fogStartEnd;
+uniform int fogMode;
+uniform float fogDensity;
uniform vec3 playerPos;
@@ -49,7 +51,10 @@ void main()
vec4 eyePos = (modelView * (vec4(aPos - playerPos, 1.0) + vec4(0, 0.12, 0, 0)));
float c = length(eyePos);
- float fogFactor = clamp((e - c) / (e - s), 0, 1);
+ float fogFactor = fogMode == 0x2601
+ ? clamp((e - c) / (e - s), 0, 1) /* GL_LINEAR */
+ : exp(-fogDensity * c); /* GL_EXP */
+
FogFactor = fogFactor;
} else {