- float new_alpha = mix(bottom.a, 1.0, top.a);
- if (new_alpha < 1e-6) {
- // new_alpha = 0 only if top.a = bottom.a = 0, at least as long as
- // both alphas are within range. (If they're not, the result is not
- // meaningful anyway.) And if new_alpha = 0, we don't really have
- // any meaningful output anyway, so just set it to zero instead of
- // getting division-by-zero below.
- return vec4(0.0);
- } else {
- vec3 premultiplied_color = mix(bottom.rgb * bottom.aaa, top.rgb, top.a);
- vec3 color = premultiplied_color / new_alpha;
- return vec4(color.r, color.g, color.b, new_alpha);
- }