1 precision mediump float;
5 uniform int uTextureUsage0;
6 uniform int uTextureUsage1;
7 uniform sampler2D uTextureUnit0;
8 uniform sampler2D uTextureUnit1;
9 uniform int uFogEnable;
11 uniform vec4 uFogColor;
12 uniform float uFogStart;
13 uniform float uFogEnd;
14 uniform float uFogDensity;
18 varying vec2 vTextureCoord0;
19 varying vec2 vTextureCoord1;
20 varying vec4 vVertexColor;
21 varying vec4 vSpecularColor;
22 varying float vFogCoord;
26 const float LOG2 = 1.442695;
27 float FogFactor = 0.0;
29 if (uFogType == 0) // Exp
31 FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
33 else if (uFogType == 1) // Linear
35 float Scale = 1.0 / (uFogEnd - uFogStart);
36 FogFactor = (uFogEnd - vFogCoord) * Scale;
38 else if (uFogType == 2) // Exp2
40 FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
43 FogFactor = clamp(FogFactor, 0.0, 1.0);
50 vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
51 vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
53 if (bool(uTextureUsage0))
54 Color0 = texture2D(uTextureUnit0, vTextureCoord0);
56 if (bool(uTextureUsage1))
57 Color1 = texture2D(uTextureUnit1, vTextureCoord1);
59 vec4 FinalColor = (Color0 * vVertexColor.a + Color1 * (1.0 - vVertexColor.a)) * vVertexColor;
60 FinalColor += vSpecularColor;
64 float FogFactor = computeFog();
65 vec4 FogColor = uFogColor;
67 FinalColor = mix(FogColor, FinalColor, FogFactor);
70 gl_FragColor = FinalColor;