]> git.lizzy.rs Git - irrlicht.git/blob - media/Shaders/Solid2Layer.fsh
Fix mistake in a677f5a01ac428d16e0e83b021dd0e8cb1ee9f53
[irrlicht.git] / media / Shaders / Solid2Layer.fsh
1 #version 100
2
3 precision mediump float;
4
5 /* Uniforms */
6
7 uniform int uTextureUsage0;
8 uniform int uTextureUsage1;
9 uniform sampler2D uTextureUnit0;
10 uniform sampler2D uTextureUnit1;
11 uniform int uFogEnable;
12 uniform int uFogType;
13 uniform vec4 uFogColor;
14 uniform float uFogStart;
15 uniform float uFogEnd;
16 uniform float uFogDensity;
17
18 /* Varyings */
19
20 varying vec2 vTextureCoord0;
21 varying vec2 vTextureCoord1;
22 varying vec4 vVertexColor;
23 varying vec4 vSpecularColor;
24 varying float vFogCoord;
25
26 float computeFog()
27 {
28         const float LOG2 = 1.442695;
29         float FogFactor = 0.0;
30
31         if (uFogType == 0) // Exp
32         {
33                 FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
34         }
35         else if (uFogType == 1) // Linear
36         {
37                 float Scale = 1.0 / (uFogEnd - uFogStart);
38                 FogFactor = (uFogEnd - vFogCoord) * Scale;
39         }
40         else if (uFogType == 2) // Exp2
41         {
42                 FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
43         }
44
45         FogFactor = clamp(FogFactor, 0.0, 1.0);
46
47         return FogFactor;
48 }
49
50 void main()
51 {
52         vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
53         vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
54
55         if (bool(uTextureUsage0))
56                 Color0 = texture2D(uTextureUnit0, vTextureCoord0);
57
58         if (bool(uTextureUsage1))
59                 Color1 = texture2D(uTextureUnit1, vTextureCoord1);
60
61         vec4 FinalColor = (Color0 * vVertexColor.a + Color1 * (1.0 - vVertexColor.a)) * vVertexColor;
62         FinalColor += vSpecularColor;
63
64         if (bool(uFogEnable))
65         {
66                 float FogFactor = computeFog();
67                 vec4 FogColor = uFogColor;
68                 FogColor.a = 1.0;
69                 FinalColor = mix(FogColor, FinalColor, FogFactor);
70         }
71
72         gl_FragColor = FinalColor;
73
74 }