waterFragmentShader top-level property
Implementation
final ShaderObject waterFragmentShader = ShaderObject("WaterPixelateF")
..AddUniformVars([uTexture, uTime])
..SetBody([
"""
float wave(vec2 pos, float srcX, float srcY, float t) {
float dist = 300.0 * length(pos - vec2(srcX, srcY));
return sin(dist - 0.15 * t);
}
void main() {
vec2 center = gl_FragCoord.xy;
vec3 color = texelFetch(${uTexture}, ivec2(center), 0).rgb;
vec2 uv = center / vec2(textureSize(${uTexture}, 0));
float t = ${uTime} * 50.0;
float res = 0.0;
res += wave(uv, 0.6, 0.7, t);
res += wave(uv, 0.9, 0.9, t);
res += wave(uv, -0.6, 0.3, t);
res += wave(uv, 0.1, 0.4, t);
// res += wave(uv, 0.1, 0.4, t);
res += wave(uv, 0.5, 0.5, t);
res += wave(uv, -1.0, 1.4, t);
${oFragColor} = vec4(color * (0.9 + 0.012 * res), 1.0);
}
"""
]);