35 lines
755 B
GLSL
35 lines
755 B
GLSL
precision highp float;
|
|
precision highp int;
|
|
|
|
uniform sampler2D tInput;
|
|
uniform vec2 delta;
|
|
in vec2 coord;
|
|
|
|
out vec4 fragColor;
|
|
|
|
void main() {
|
|
/* get vertex info */
|
|
vec4 info = texture(tInput, coord);
|
|
|
|
/* calculate average neighbor height */
|
|
vec2 dx = vec2(delta.x, 0.0);
|
|
vec2 dy = vec2(0.0, delta.y);
|
|
float average = (
|
|
texture(tInput, coord - dx).r +
|
|
texture(tInput, coord - dy).r +
|
|
texture(tInput, coord + dx).r +
|
|
texture(tInput, coord + dy).r
|
|
) * 0.25;
|
|
|
|
/* change the velocity to move toward the average */
|
|
info.g += (average - info.r) * 2.0;
|
|
|
|
/* attenuate the velocity a little so waves do not last forever */
|
|
info.g *= 0.995;
|
|
|
|
/* move the vertex along the velocity */
|
|
info.r += info.g;
|
|
|
|
fragColor = info;
|
|
}
|