]> git.lizzy.rs Git - irrlicht.git/blob - media/Shaders/LightmapAdd.fsh
895625f5ded3c5ec3d2d844322852cc84eb5ecf4
[irrlicht.git] / media / Shaders / LightmapAdd.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 + Color1) * vVertexColor + vSpecularColor;
62
63         if (bool(uFogEnable))
64         {
65                 float FogFactor = computeFog();
66                 vec4 FogColor = uFogColor;
67                 FogColor.a = 1.0;
68                 FinalColor = mix(FogColor, FinalColor, FogFactor);
69         }
70
71         gl_FragColor = FinalColor;
72 }