lumidotsFragmentShader top-level property
Implementation
final ShaderObject lumidotsFragmentShader = ShaderObject("LumidotsF")
..AddUniformVars([uPointSize, uTexture])
..SetBody([
"""
// Inspired by https://www.shadertoy.com/view/MtcXRB
// http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color
float RGB2Luma(vec3 rgb) { return dot(rgb, vec3(0.212, 0.715, 0.072)); }
// float RGB2Luma(vec3 rgb) { return dot(rgb, vec3(0.299, 0.587, 0.114)); }
void main() {
vec2 texdim = vec2(textureSize(${uTexture}, 0));
float r = ${uPointSize};
vec2 uv = gl_FragCoord.xy;
vec2 center = floor(uv / r / 2.0) * 2.0 * r + r;
vec3 col = texelFetch(${uTexture}, ivec2(center), 0).rgb;
float lum = max(0.1, RGB2Luma(col));
float alpha = smoothstep(1.0, 0.5,
distance(center, uv) / lum / r);
${oFragColor}.rgb = col.rgb * alpha;
}
"""
]);