
#version 130


uniform sampler2D SamplerBGRA;
//uniform sampler2D SamplerTableTex1;
//uniform sampler2D SamplerTableTex2;
uniform sampler2D SamplerBackTex1;
//uniform sampler2D SamplerBackTex2;

out     vec4 		outText;	// output sampler

uniform float rangeX, rangeY, rangeW, rangeH;
uniform  float kx;
uniform  float ky;
uniform  float saturate;
uniform  float bound_l;
uniform  float strength; // effect strength, blend with source, 0 -- 1, default is 1

void main(void)
{
	 vec2 v_texCoord = gl_TexCoord[0].st;

     vec3 src,dst;
     vec3 tmp_s;
     float alpha;    
     float lum;
     vec3 txt;
            
    src.rgb = texture2D(SamplerBGRA, v_texCoord).rgb;
    dst = src;

     vec2 smp_coord;
    smp_coord.x = v_texCoord.x*rangeW+rangeX;
    smp_coord.y = (v_texCoord.y*rangeH+rangeY) * kx/ky;
    txt = texture2D(SamplerBackTex1, smp_coord).rgb;
        
    lum = dst.r*0.299 + dst.g*0.587 + dst.b*0.114;
    tmp_s = lum*(1.0-saturate) + saturate*dst;
    tmp_s = (tmp_s - bound_l)/saturate;    
    dst = tmp_s;
    
        dst.r = min(1.0,dst.r);
        dst.g = min(1.0,dst.g);
        dst.b = min(1.0,dst.b);
        
        vec3 tmp_txt;
        tmp_txt.r = min(1.0,dst.r + txt.r - 2.0 * txt.r * dst.r);
        tmp_txt.g = min(1.0,dst.g + txt.g - 2.0 * txt.g * dst.g);
        tmp_txt.b = min(1.0,dst.b + txt.b - 2.0 * txt.b * dst.b);
        
        dst = dst*0.13 + tmp_txt*0.87;

	lum = (txt.r+txt.g+txt.b)/3.0;

	tmp_txt.r = min(1.0,lum + dst.r);
        tmp_txt.g = min(1.0,lum + dst.g);
        tmp_txt.b = min(1.0,lum + dst.b);

	dst = dst*0.35 + tmp_txt*0.65;

	if(dst.r + lum < 1.0)
        {
            tmp_txt.r = 0.0;
        }
        else
        {
            tmp_txt.r = 1.0;
        }
        if(dst.g + lum < 1.0)
        {
            tmp_txt.g = 0.0;
        }
        else
        {
            tmp_txt.g = 1.0;
        }
        if(dst.b + lum < 1.0)
        {
            tmp_txt.b = 0.0;
        }
        else
        {
            tmp_txt.b = 1.0;
        }
	dst = dst*0.84 + tmp_txt*0.16;

    outText = vec4(mix(src, dst, strength),1.0);
}