]> git.lizzy.rs Git - irrlicht.git/blob - media/Shaders/OneTextureBlend.fsh
OpenGL3: Drop always-zero vSpecularColor from the shaders
[irrlicht.git] / media / Shaders / OneTextureBlend.fsh
1 #version 100
2
3 precision mediump float;
4
5 /* Uniforms */
6
7 uniform int uTextureUsage0;
8 uniform sampler2D uTextureUnit0;
9 uniform int uBlendType;
10 uniform int uFogEnable;
11 uniform int uFogType;
12 uniform vec4 uFogColor;
13 uniform float uFogStart;
14 uniform float uFogEnd;
15 uniform float uFogDensity;
16
17 /* Varyings */
18
19 varying vec2 vTextureCoord0;
20 varying vec4 vVertexColor;
21 varying float vFogCoord;
22
23 float computeFog()
24 {
25         const float LOG2 = 1.442695;
26         float FogFactor = 0.0;
27
28         if (uFogType == 0) // Exp
29         {
30                 FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
31         }
32         else if (uFogType == 1) // Linear
33         {
34                 float Scale = 1.0 / (uFogEnd - uFogStart);
35                 FogFactor = (uFogEnd - vFogCoord) * Scale;
36         }
37         else if (uFogType == 2) // Exp2
38         {
39                 FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
40         }
41
42         FogFactor = clamp(FogFactor, 0.0, 1.0);
43
44         return FogFactor;
45 }
46
47 void main()
48 {
49         vec4 Color0 = vVertexColor;
50         vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
51
52         if (bool(uTextureUsage0))
53                 Color1 = texture2D(uTextureUnit0, vTextureCoord0);
54
55         vec4 FinalColor = Color0 * Color1;
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 }