aboutsummaryrefslogtreecommitdiff
path: root/media/Shaders/SphereMap.fsh
diff options
context:
space:
mode:
Diffstat (limited to 'media/Shaders/SphereMap.fsh')
-rw-r--r--media/Shaders/SphereMap.fsh64
1 files changed, 64 insertions, 0 deletions
diff --git a/media/Shaders/SphereMap.fsh b/media/Shaders/SphereMap.fsh
new file mode 100644
index 0000000..df1010e
--- /dev/null
+++ b/media/Shaders/SphereMap.fsh
@@ -0,0 +1,64 @@
+#version 100
+
+precision mediump float;
+
+/* Uniforms */
+
+uniform int uTextureUsage0;
+uniform sampler2D uTextureUnit0;
+uniform int uFogEnable;
+uniform int uFogType;
+uniform vec4 uFogColor;
+uniform float uFogStart;
+uniform float uFogEnd;
+uniform float uFogDensity;
+
+/* Varyings */
+
+varying vec2 vTextureCoord0;
+varying vec4 vVertexColor;
+varying vec4 vSpecularColor;
+varying float vFogCoord;
+
+float computeFog()
+{
+ const float LOG2 = 1.442695;
+ float FogFactor = 0.0;
+
+ if (uFogType == 0) // Exp
+ {
+ FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
+ }
+ else if (uFogType == 1) // Linear
+ {
+ float Scale = 1.0 / (uFogEnd - uFogStart);
+ FogFactor = (uFogEnd - vFogCoord) * Scale;
+ }
+ else if (uFogType == 2) // Exp2
+ {
+ FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
+ }
+
+ FogFactor = clamp(FogFactor, 0.0, 1.0);
+
+ return FogFactor;
+}
+
+void main()
+{
+ vec4 Color = vVertexColor;
+
+ if (bool(uTextureUsage0))
+ Color *= texture2D(uTextureUnit0, vTextureCoord0);
+ Color += vSpecularColor;
+
+ if (bool(uFogEnable))
+ {
+ float FogFactor = computeFog();
+ vec4 FogColor = uFogColor;
+ FogColor.a = 1.0;
+ Color = mix(FogColor, Color, FogFactor);
+ }
+
+ gl_FragColor = Color;
+}