aboutsummaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorx2048 <codeforsmile@gmail.com>2022-09-06 08:25:18 +0200
committerGitHub <noreply@github.com>2022-09-06 08:25:18 +0200
commitff6dcfea82974df6db5a557e31aaddb6bdb7a71f (patch)
tree18bafaedcfdff36a0c0719653b99370b7434b344 /client
parent464043b8abdbd936640757604ecb21662592043b (diff)
downloadminetest-ff6dcfea82974df6db5a557e31aaddb6bdb7a71f.tar.xz
Implement rendering pipeline and post-processing (#12465)
Co-authored-by: Lars Mueller <appgurulars@gmx.de> Co-authored-by: sfan5 <sfan5@live.de> Co-authored-by: lhofhansl <lhofhansl@yahoo.com>
Diffstat (limited to 'client')
-rw-r--r--client/shaders/default_shader/opengl_fragment.glsl2
-rw-r--r--client/shaders/nodes_shader/opengl_fragment.glsl43
-rw-r--r--client/shaders/nodes_shader/opengl_vertex.glsl4
-rw-r--r--client/shaders/object_shader/opengl_fragment.glsl39
-rw-r--r--client/shaders/second_stage/opengl_fragment.glsl53
-rw-r--r--client/shaders/second_stage/opengl_vertex.glsl11
-rw-r--r--client/shaders/selection_shader/opengl_fragment.glsl2
7 files changed, 75 insertions, 79 deletions
diff --git a/client/shaders/default_shader/opengl_fragment.glsl b/client/shaders/default_shader/opengl_fragment.glsl
index 5018ac6ea..300c0c589 100644
--- a/client/shaders/default_shader/opengl_fragment.glsl
+++ b/client/shaders/default_shader/opengl_fragment.glsl
@@ -2,5 +2,5 @@ varying lowp vec4 varColor;
void main(void)
{
- gl_FragColor = varColor;
+ gl_FragData[0] = varColor;
}
diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl
index c4b947e72..1f7d98069 100644
--- a/client/shaders/nodes_shader/opengl_fragment.glsl
+++ b/client/shaders/nodes_shader/opengl_fragment.glsl
@@ -45,6 +45,9 @@ centroid varying vec2 varTexCoord;
#endif
varying vec3 eyeVec;
varying float nightRatio;
+varying vec3 tsEyeVec;
+varying vec3 lightVec;
+varying vec3 tsLightVec;
const float fogStart = FOG_START;
const float fogShadingParameter = 1.0 / ( 1.0 - fogStart);
@@ -359,40 +362,6 @@ float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
#endif
#endif
-#if ENABLE_TONE_MAPPING
-
-/* Hable's UC2 Tone mapping parameters
- A = 0.22;
- B = 0.30;
- C = 0.10;
- D = 0.20;
- E = 0.01;
- F = 0.30;
- W = 11.2;
- equation used: ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F
-*/
-
-vec3 uncharted2Tonemap(vec3 x)
-{
- return ((x * (0.22 * x + 0.03) + 0.002) / (x * (0.22 * x + 0.3) + 0.06)) - 0.03333;
-}
-
-vec4 applyToneMapping(vec4 color)
-{
- color = vec4(pow(color.rgb, vec3(2.2)), color.a);
- const float gamma = 1.6;
- const float exposureBias = 5.5;
- color.rgb = uncharted2Tonemap(exposureBias * color.rgb);
- // Precalculated white_scale from
- //vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W));
- vec3 whiteScale = vec3(1.036015346);
- color.rgb *= whiteScale;
- return vec4(pow(color.rgb, vec3(1.0 / gamma)), color.a);
-}
-#endif
-
-
-
void main(void)
{
vec3 color;
@@ -470,10 +439,6 @@ void main(void)
}
#endif
-#if ENABLE_TONE_MAPPING
- col = applyToneMapping(col);
-#endif
-
// Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?),
// the fog will only be rendered correctly if the last operation before the
// clamp() is an addition. Else, the clamp() seems to be ignored.
@@ -488,5 +453,5 @@ void main(void)
col = mix(skyBgColor, col, clarity);
col = vec4(col.rgb, base.a);
- gl_FragColor = col;
+ gl_FragData[0] = col;
}
diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl
index 40f0965e1..42fae7612 100644
--- a/client/shaders/nodes_shader/opengl_vertex.glsl
+++ b/client/shaders/nodes_shader/opengl_vertex.glsl
@@ -42,6 +42,7 @@ centroid varying vec2 varTexCoord;
varying float perspective_factor;
#endif
+varying float area_enable_parallax;
varying vec3 eyeVec;
varying float nightRatio;
@@ -193,6 +194,9 @@ void main(void)
vPosition = gl_Position.xyz;
eyeVec = -(mWorldView * pos).xyz;
+#ifdef SECONDSTAGE
+ normalPass = normalize((inVertexNormal+1)/2);
+#endif
vNormal = inVertexNormal;
// Calculate color.
diff --git a/client/shaders/object_shader/opengl_fragment.glsl b/client/shaders/object_shader/opengl_fragment.glsl
index 1fefc764b..662d0c865 100644
--- a/client/shaders/object_shader/opengl_fragment.glsl
+++ b/client/shaders/object_shader/opengl_fragment.glsl
@@ -361,39 +361,6 @@ float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
#endif
#endif
-#if ENABLE_TONE_MAPPING
-
-/* Hable's UC2 Tone mapping parameters
- A = 0.22;
- B = 0.30;
- C = 0.10;
- D = 0.20;
- E = 0.01;
- F = 0.30;
- W = 11.2;
- equation used: ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F
-*/
-
-vec3 uncharted2Tonemap(vec3 x)
-{
- return ((x * (0.22 * x + 0.03) + 0.002) / (x * (0.22 * x + 0.3) + 0.06)) - 0.03333;
-}
-
-vec4 applyToneMapping(vec4 color)
-{
- color = vec4(pow(color.rgb, vec3(2.2)), color.a);
- const float gamma = 1.6;
- const float exposureBias = 5.5;
- color.rgb = uncharted2Tonemap(exposureBias * color.rgb);
- // Precalculated white_scale from
- //vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W));
- vec3 whiteScale = vec3(1.036015346);
- color.rgb *= whiteScale;
- return vec4(pow(color.rgb, vec3(1.0 / gamma)), color.a);
-}
-#endif
-
-
void main(void)
{
@@ -473,10 +440,6 @@ void main(void)
}
#endif
-#if ENABLE_TONE_MAPPING
- col = applyToneMapping(col);
-#endif
-
// Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?),
// the fog will only be rendered correctly if the last operation before the
// clamp() is an addition. Else, the clamp() seems to be ignored.
@@ -491,5 +454,5 @@ void main(void)
col = mix(skyBgColor, col, clarity);
col = vec4(col.rgb, base.a);
- gl_FragColor = col;
+ gl_FragData[0] = col;
}
diff --git a/client/shaders/second_stage/opengl_fragment.glsl b/client/shaders/second_stage/opengl_fragment.glsl
new file mode 100644
index 000000000..965450fcb
--- /dev/null
+++ b/client/shaders/second_stage/opengl_fragment.glsl
@@ -0,0 +1,53 @@
+uniform sampler2D baseTexture;
+
+#define rendered baseTexture
+
+#ifdef GL_ES
+varying mediump vec2 varTexCoord;
+#else
+centroid varying vec2 varTexCoord;
+#endif
+
+#if ENABLE_TONE_MAPPING
+
+/* Hable's UC2 Tone mapping parameters
+ A = 0.22;
+ B = 0.30;
+ C = 0.10;
+ D = 0.20;
+ E = 0.01;
+ F = 0.30;
+ W = 11.2;
+ equation used: ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F
+*/
+
+vec3 uncharted2Tonemap(vec3 x)
+{
+ return ((x * (0.22 * x + 0.03) + 0.002) / (x * (0.22 * x + 0.3) + 0.06)) - 0.03333;
+}
+
+vec4 applyToneMapping(vec4 color)
+{
+ color = vec4(pow(color.rgb, vec3(2.2)), color.a);
+ const float gamma = 1.6;
+ const float exposureBias = 5.5;
+ color.rgb = uncharted2Tonemap(exposureBias * color.rgb);
+ // Precalculated white_scale from
+ //vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W));
+ vec3 whiteScale = vec3(1.036015346);
+ color.rgb *= whiteScale;
+ return vec4(pow(color.rgb, vec3(1.0 / gamma)), color.a);
+}
+#endif
+
+void main(void)
+{
+ vec2 uv = varTexCoord.st;
+ vec4 color = texture2D(rendered, uv).rgba;
+
+#if ENABLE_TONE_MAPPING
+ color = applyToneMapping(color);
+#endif
+
+ gl_FragColor = vec4(color.rgb, 1.0); // force full alpha to avoid holes in the image.
+}
diff --git a/client/shaders/second_stage/opengl_vertex.glsl b/client/shaders/second_stage/opengl_vertex.glsl
new file mode 100644
index 000000000..12692c296
--- /dev/null
+++ b/client/shaders/second_stage/opengl_vertex.glsl
@@ -0,0 +1,11 @@
+#ifdef GL_ES
+varying mediump vec2 varTexCoord;
+#else
+centroid varying vec2 varTexCoord;
+#endif
+
+void main(void)
+{
+ varTexCoord.st = inTexCoord0.st;
+ gl_Position = inVertexPosition;
+}
diff --git a/client/shaders/selection_shader/opengl_fragment.glsl b/client/shaders/selection_shader/opengl_fragment.glsl
index 35b1f8902..2094ea0f4 100644
--- a/client/shaders/selection_shader/opengl_fragment.glsl
+++ b/client/shaders/selection_shader/opengl_fragment.glsl
@@ -8,5 +8,5 @@ void main(void)
vec2 uv = varTexCoord.st;
vec4 color = texture2D(baseTexture, uv);
color.rgb *= varColor.rgb;
- gl_FragColor = color;
+ gl_FragData[0] = color;
}