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