// vert // flat out uint object_flags; void main(void) { object_flags = qgl_ObjectFlags; if (bitfieldExtract(object_flags, 2, 1) == 0) return; qgl_MaterialIndex = qgl_Material; qgl_FragTexture = qgl_getFragTexture(); gl_Position = qgl_ftransform(); } // frag // flat in uint object_flags; float z_near = 0.1f; const float _pe = 2.4e-7; void main(void) { if (bitfieldExtract(object_flags, 2, 1) == 0) discard; vec4 diffuse = qgl_materialTexture(QGL_MAP_DIFFUSE, qgl_FragTexture.xy, vec4(0)); if(diffuse.a < 0.5) discard; float z = gl_FragCoord.z; z = ((_pe - 2.) * z_near) / (z + z + _pe - 2.); // infinite depth qgl_FragData[0].r = z; }