uniform bool depthSet; in vec3 pos; out vec2 uvs; void main() { vec3 world_pos = point_object_to_world(pos); gl_Position = point_world_to_ndc(world_pos); if (depthSet) { /* Result in a position at 1.0 (far plane). Small epsilon to avoid precision issue. * This mimics the effect of infinite projection matrix * (see http://www.terathon.com/gdc07_lengyel.pdf). */ gl_Position.z = gl_Position.w - 2.4e-7; } uvs = pos.xy * 0.5 + 0.5; }