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