webgcode
1#extension GL_EXT_frag_depth : require
2varying vec3 AABB_min;
3varying vec3 AABB_max;
4varying vec3 positionK;
5
6/*INCLUDE_FRAGLIB*/
7
8void main() {
9vec2 pos = positionK.xy;
10//lets destroy the fragments that are really out there between the input corner and the dilated corner
11if(any(bvec4(lessThan(pos, AABB_min.xy), greaterThan(pos, AABB_max.xy))))
12discard;
13// ok, we were pessimistic, but one thing still holds:
14// the true Z value can never ever be higher or lower than any Z value of the input vertices,
15// so we clip to get back to some reality
16float z = clamp(positionK.z, AABB_min.z, AABB_max.z);
17// go back to fragment world
18z = (0.5 * z + 0.5);
19// update the depth buffer, since what was a nice triangle is now a triangle with 2 bent corners (flattened by the Z clamp).
20gl_FragDepthEXT = z;
21gl_FragData[0] = vec4(1.0 - z, 0.0, 0.0, 1.0);
22}