#version 400 uniform vec4 color; uniform sampler2D tex; in vec2 texCoord; out vec4 FragColor; uniform bool modulate; void main() { // 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 { // 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); } }