waterFragmentShader top-level property

ShaderObject waterFragmentShader
final

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