lumidotsFragmentShader top-level property

ShaderObject lumidotsFragmentShader
final

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;
}
"""
  ]);