precision mediump float; varying vec4 _color; void main() { vec2 center = vec2(0.5); vec2 uv = gl_PointCoord.xy - center; float smoothing = 0.005; vec4 _color1 = vec4(_color[0], _color[1], _color[2], _color[3]); float radius1 = 0.3; vec4 _color2 = vec4(_color[0], _color[1], _color[2], _color[3]); float radius2 = 0.5; float dist = length(uv); //SMOOTH float gamma = 2.2; color1.rgb = pow(_color1.rgb, vec3(gamma)); color2.rgb = pow(_color2.rgb, vec3(gamma)); vec4 puck = mix( mix( _color1, _color2, smoothstep( radius1 - smoothing, radius1 + smoothing, dist ) ), vec4(0,0,0,0), smoothstep( radius2 - smoothing, radius2 + smoothing, dist ) ); //Gamma correction (prevents color fringes) puck.rgb = pow(puck.rgb, vec3(1.0 / gamma)); gl_FragColor = puck; }