attribute float age;
        attribute float state;
        varying float fAge;
        varying float fState;
        void main() {
            fAge = age;
            fState = state;
            gl_PointSize = 3.0;
            gl_Position = projectionMatrix *
                          modelViewMatrix *
                          vec4(position, 1.0);
        }
    
    
        varying float fAge;
        varying float fState;
        void main() {
            if (fState < 0.5) {
                gl_FragColor = vec4(0, 0, 0, 0);
                return;
            }
            if (fAge < 0.1) {
                gl_FragColor = vec4(1.0, (1.0 - fAge * 6.0), 1.0 - (fAge * 10.0), 1.0);
            } else {
                gl_FragColor = vec4(1.0 - fAge, (1.0 - fAge) * 0.4, 0, 0.75);
            }
        }
    
    
        attribute float age;
        attribute float state;
        varying float fAge;
        varying float fState;
        void main() {
            fAge = age;
            fState = state;
            gl_PointSize = 10.0 + 15.0 * age * age;
            gl_Position = projectionMatrix *
                          modelViewMatrix *
                          vec4(position, 1.0);
        }
    
    
        varying float fAge;
        varying float fState;
        uniform sampler2D texture1;
        void main() {
            if (fState < 0.5) {
                gl_FragColor = vec4(0, 0, 0, 0);
                return;
            }
            vec4 texColor = texture2D(texture1, gl_PointCoord);
            gl_FragColor = vec4(texColor.xyz, texColor.w * (0.4 - 0.3 * fAge));
        }