/*
 * File: SeparateAlphaTextureShader.frag.txt
 * Shader for drawing of textures where the alpha channel is looked up
 * separately from the RGB channels, i.e. RGB texel lookup uses texture
 * coordinates offset by given optional shift parameters.
 *
 * (c) 2009 - 2016 by Mario Kleiner, licensed under MIT license.
 *
 */

/* Attributes passed from Screen(): See the ProceduralShadingAPI.m file for infos: */
attribute vec4 modulateColor;
attribute vec4 auxParameters0;

/* Information passed to the fragment shader: */
varying vec4   baseColor;

void main()
{
    /* Apply standard geometric transformations to patch: */
    gl_Position = ftransform();

    /* Alpha: Do not pass real texture coordinates, but ones corrected for hardware offsets (-0.5,0.5) */
    gl_TexCoord[0] = (gl_TextureMatrix[0] * gl_MultiTexCoord0) + vec4(-0.5, 0.5, 0.0, 0.0);

    /* Color: Apply offsets to primary texcoords, then pass them as secondary texcoords set: */

    /* Start with original texcoords: */
    vec4 modTexCoord = gl_MultiTexCoord0;

    /* Add (x,y) offset passed in 3rd and 4th auxParameters0 elements: */
    modTexCoord.xy = modTexCoord.xy + auxParameters0.zw;

    /* Correct for hw offsets, apply texture matrix: */
    gl_TexCoord[1] = (gl_TextureMatrix[0] * modTexCoord) + vec4(-0.5, 0.5, 0.0, 0.0);

    /* Apply (x,y) offsets past matrix transformations, from 1st and 2nd auxParameters0 elements: */
    gl_TexCoord[1].xy = gl_TexCoord[1].xy + auxParameters0.xy;

    /* Pass through modulateColor: */
    baseColor = modulateColor;
}
