1// $LastChangedDate: 2010-11-12 11:27:22 -0500 (Fri, 12 Nov 2010) $
2
3    // Apply shadow.
4    if ( uni_shadowMode != SHADOW_MODE_DISABLED )
5    {
6        float SHADOW_FACTOR = 0.3;  // dark gray instead of black
7        float f;
8
9        if ( uni_shadowMode == SHADOW_MODE_SAMPLE4 )
10        {
11            float b = 0.0015;  // bias
12            vec4 i = gl_TexCoord[TEXTURE_UNIT_SHADOW];
13            f = 0.0;
14            f += shadow2DProj( uni_texture_shadow, vec4(i.x-b, i.y-b, i.z, i.w) ).r;
15            f += shadow2DProj( uni_texture_shadow, vec4(i.x-b, i.y+b, i.z, i.w) ).r;
16            f += shadow2DProj( uni_texture_shadow, vec4(i.x+b, i.y-b, i.z, i.w) ).r;
17            f += shadow2DProj( uni_texture_shadow, vec4(i.x+b, i.y+b, i.z, i.w) ).r;
18            f *= 0.25;
19        }
20        else  // SHADOW_MODE_SAMPLE1
21        {
22            f = shadow2DProj( uni_texture_shadow, gl_TexCoord[TEXTURE_UNIT_SHADOW] ).r;
23        }
24
25        f = max( SHADOW_FACTOR, f );            // dark gray instead of solid black
26        gl_FragColor.rgb *= vec3( f, f, f );    // apply shadow to color fragment
27    }
28