3 precision mediump float;
7 uniform float uModulate;
8 uniform int uTextureUsage0;
9 uniform int uTextureUsage1;
10 uniform sampler2D uTextureUnit0;
11 uniform sampler2D uTextureUnit1;
12 uniform int uFogEnable;
14 uniform vec4 uFogColor;
15 uniform float uFogStart;
16 uniform float uFogEnd;
17 uniform float uFogDensity;
21 varying vec2 vTextureCoord0;
22 varying vec2 vTextureCoord1;
23 varying vec4 vVertexColor;
24 varying vec4 vSpecularColor;
25 varying float vFogCoord;
29 const float LOG2 = 1.442695;
30 float FogFactor = 0.0;
32 if (uFogType == 0) // Exp
34 FogFactor = exp2(-uFogDensity * vFogCoord * LOG2);
36 else if (uFogType == 1) // Linear
38 float Scale = 1.0 / (uFogEnd - uFogStart);
39 FogFactor = (uFogEnd - vFogCoord) * Scale;
41 else if (uFogType == 2) // Exp2
43 FogFactor = exp2(-uFogDensity * uFogDensity * vFogCoord * vFogCoord * LOG2);
46 FogFactor = clamp(FogFactor, 0.0, 1.0);
53 vec4 Color0 = vec4(1.0, 1.0, 1.0, 1.0);
54 vec4 Color1 = vec4(1.0, 1.0, 1.0, 1.0);
56 if (bool(uTextureUsage0))
57 Color0 = texture2D(uTextureUnit0, vTextureCoord0);
59 if (bool(uTextureUsage1))
60 Color1 = texture2D(uTextureUnit1, vTextureCoord1);
62 vec4 FinalColor = (Color0 * Color1 * uModulate) * vVertexColor;
63 FinalColor += vSpecularColor;
67 float FogFactor = computeFog();
68 vec4 FogColor = uFogColor;
70 FinalColor = mix(FogColor, FinalColor, FogFactor);
73 gl_FragColor = FinalColor;