#version 400 uniform vec4 color; uniform sampler2D tex; in vec2 texCoord; out vec4 FragColor; uniform bool modulate; uniform bool debug; uniform bool debugColor; uniform float debugVal; void main() { if (debugColor) { FragColor = color; return; } if (debug) { FragColor = mix(vec4(1, 1, 1, 1), vec4(1, 0, 0, 1), debugVal); return; } // Cf = color from fragment, Ct = color from texture // Cc = color from texture environment -- not set, defaults to (0,0,0,0) // Af = alpha from fragment, At = alpha from texture // C = output color, A = output alpha float f = texture(tex, texCoord).r; if (modulate) { // GL_MODULATE: C // C = Cf * Ct // A = Af * At FragColor = color * f; } else { // "That is, the colors in the frame buffer are multiplied by the // attenuation ratio of the billboard texture and then the colors in // the texture are added" // GL_BLEND: // C = Cf * (1-Ct) + Cc * Ct // A = Af * At vec3 C = color.rgb * (1 - f); float A = color.a * f; FragColor = vec4(C, A); } }