#version 110

uniform bool use_fixed_screen_size;
uniform float zoom;
uniform float point_size;
uniform float near_plane_height;

float fixed_screen_size()
{
    return point_size;
}

float fixed_world_size()
{
    return (gl_Position.w == 1.0) ? zoom * near_plane_height * point_size : near_plane_height * point_size / gl_Position.w;
}

void main()
{
    gl_Position = ftransform();
    gl_PointSize = use_fixed_screen_size ? fixed_screen_size() : fixed_world_size();
}