
#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;
    
        vec3 tmp_txt;
        tmp_txt.r = min(1.0,txt.r+dst.r-2*txt.r*dst.r);
        tmp_txt.g = min(1.0,txt.g+dst.g-2*txt.g*dst.g);
        tmp_txt.b = min(1.0,txt.b+dst.b-2*txt.b*dst.b);
        
        dst = dst*0.49 + tmp_txt*0.51;
    
    outText = vec4(mix(src, dst, strength),1.0);
}