1 precision mediump float;
5 uniform int uTextureUsage0;
6 uniform sampler2D uTextureUnit0;
7 uniform int uBlendType;
8 uniform int uFogEnable;
10 uniform vec4 uFogColor;
11 uniform float uFogStart;
12 uniform float uFogEnd;
13 uniform float uFogDensity;
17 varying vec2 vTextureCoord0;
18 varying vec4 vVertexColor;
19 varying vec4 vSpecularColor;
20 varying float vFogCoord;
24 const float LOG2 = 1.442695;
25 float FogFactor = 0.0;
27 if (uFogType == 0) // Exp
29 FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
31 else if (uFogType == 1) // Linear
33 float Scale = 1.0 / (uFogEnd - uFogStart);
34 FogFactor = (uFogEnd - vFogCoord) * Scale;
36 else if (uFogType == 2) // Exp2
38 FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
41 FogFactor = clamp(FogFactor, 0.0, 1.0);
48 vec4 Color0 = vVertexColor;
49 vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
51 if (bool(uTextureUsage0))
52 Color1 = texture2D(uTextureUnit0, vTextureCoord0);
54 vec4 FinalColor = Color0 * Color1;
55 FinalColor += vSpecularColor;
59 FinalColor.w = Color0.w;
61 else if (uBlendType == 2)
63 FinalColor.w = Color1.w;
68 float FogFactor = computeFog();
69 vec4 FogColor = uFogColor;
71 FinalColor = mix(FogColor, FinalColor, FogFactor);
74 gl_FragColor = FinalColor;