varying vec2 v_texCoord;
uniform vec4 u_overlayColor;
uniform float u_opacityStartY;
uniform float u_opacityEndY;
uniform sampler2D u_texture;

void main()
{
    vec4 c = texture2D(u_texture, v_texCoord);
    vec4 newColor = vec4(u_overlayColor.a * c.rgb + (1.0 - u_overlayColor.a) * u_overlayColor.rgb, c.a);
    if(u_opacityEndY == u_opacityStartY){
    }else if(u_opacityEndY > u_opacityStartY){
        float per = (v_texCoord.y - u_opacityStartY) / (u_opacityEndY - u_opacityStartY);
        if(per > 1.0){
            per = 1.0;
        }
        else if(per < 0.0){
            per = 0.0;
        }
        newColor.a = 1.0 - per;
        newColor.rgb = newColor.rgb * newColor.a;
    }else{
        float per = (v_texCoord.y - u_opacityEndY) / (u_opacityStartY - u_opacityEndY);
        if(per > 1.0){
            per = 1.0;
        }
        else if(per < 0.0){
            per = 0.0;
        }
        newColor.a = per;
        newColor.rgb = newColor.rgb * newColor.a;
    }
    if (c.r > 0.0 && c.g > 0.0 && c.b > 0.0 && c.a > 0.0) {
        gl_FragColor = newColor;
    }else{
        gl_FragColor = c;
    }
}
