varying vec2 v_texCoord;
varying vec4 v_fragmentColor;

uniform vec3 u_changeColor;
uniform sampler2D u_texture;

void main()
{
    vec4 c = texture2D(u_texture, v_texCoord);
    if (c.r == 0.0 && c.g == 0.0 && c.b == 0.0 && c.a == 0.0) {
        // 透明部分はBlendFuncの乗算で消えてしまうので白で塗りつぶす
        gl_FragColor = vec4(1.0);
    }else{
        // 乗算でうまくいくようにアルファは1.0にする
        vec4 changeColor = vec4(u_changeColor, 1.0);
        // まずは通常の色変更
        changeColor.r = changeColor.r * c.a;
        changeColor.g = changeColor.g * c.a;
        changeColor.b = changeColor.b * c.a;
        // BlendFuncの乗算でPhotoshopのようにうまくいくように、
        // 白地にアルファブレンドで載せた時の色にする (vec4(1.0)に対してアルファブレンドしてる計算）
        changeColor.r = changeColor.r + (1.0 - c.a);
        changeColor.g = changeColor.g + (1.0 - c.a);
        changeColor.b = changeColor.b + (1.0 - c.a);
        gl_FragColor = changeColor;
    }
}
