uniform sampler2D tex;
in vec2 texCoord;
out vec4 FragColor;
+uniform bool modulate;
void main() {
- FragColor = texture(tex, texCoord).r * color;
+ // Cf = color from fragment, Ct = color from texture
+ // Cc = color from texture environment(?) assume to be 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);
+ }
}