dotFragmentShader top-level property
Implementation
final ShaderObject dotFragmentShader = ShaderObject("DotF")
..AddUniformVars([uCenter2, uScale, uAngle, uTexture])
..SetBody([
"""
// Inspired by three.js
float pattern(vec2 tex) {
float s = sin( ${uAngle} );
float c = cos( ${uAngle} );
vec2 point = vec2( c * tex.x - s * tex.y, s * tex.x + c * tex.y ) * ${uScale};
return ( sin( point.x ) * sin( point.y ) ) * 4.0;
}
void main() {
vec2 center = gl_FragCoord.xy;
vec2 texdim = vec2(textureSize(${uTexture}, 0));
vec4 color = texelFetch(${uTexture}, ivec2(center), 0);
float average = ( color.r + color.g + color.b ) / 3.0;
vec2 tex = center - ${uCenter2};
${oFragColor} = vec4( vec3( average * 10.0 - 5.0 + pattern(tex) ), color.a );
}
"""
]);