in vec4 radii; in vec4 fillColor; in vec4 outlineColor; out vec4 fragColor; void main() { float dist = length(gl_PointCoord - vec2(0.5)); /* transparent outside of point * --- 0 --- * smooth transition * --- 1 --- * pure outline color * --- 2 --- * smooth transition * --- 3 --- * pure fill color * ... * dist = 0 at center of point */ float midStroke = 0.5 * (radii[1] + radii[2]); if (dist > midStroke) { fragColor.rgb = outlineColor.rgb; fragColor.a = mix(outlineColor.a, 0.0, smoothstep(radii[1], radii[0], dist)); } else { fragColor = mix(fillColor, outlineColor, smoothstep(radii[3], radii[2], dist)); } fragColor = blender_srgb_to_framebuffer_space(fragColor); }