   gl_FragColor.z += gl_FragColor.x * gl_FragColor.x * 0.25;
   gl_FragColor.yw = fract(gl_FragColor.xz * 255.0);
   gl_FragColor.xz -= gl_FragColor.yw * coef;
-#endif
 }

uniform sampler2D texShadow;

varying mediump vec2 texCoord;

highp vec2 frexp(highp float x)
{
	highp float e = ceil(log2(x));
	return vec2(x * exp2(-e), e * (-1.0 / 255.0));
}

highp float ldexp(lowp vec2 v)
{
	return v.x * exp2(v.y * (-255.0));
}

void main()
{

  const mediump vec2 textureSize = vec2(FBO_MAIN_WIDTH, FBO_MAIN_HEIGHT);
  const mediump vec2 sourceSize = vec2(SHADOWMAP_MAIN_WIDTH, SHADOWMAP_MAIN_HEIGHT);
  mediump vec2 coord = texCoord * (sourceSize / textureSize);

  const mediump vec2 off = vec2(1.0, 1.0) / textureSize;
  lowp vec4 t0 = texture2D(texShadow, coord + vec2(-off.x, -off.y));
  lowp vec4 t1 = texture2D(texShadow, coord + vec2( off.x, -off.y));
