#ifndef USE_GPU_SHADER_CREATE_INFO uniform vec4 color; uniform vec4 outlineColor; in vec4 radii; out vec4 fragColor; #endif 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 point 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(color, outlineColor, smoothstep(radii[3], radii[2], dist)); } if (fragColor.a == 0.0) { discard; } }