First, there are two separate shore wave frequencies, and the one to use at given place is selected using a helper texture that contains islands of values from -1 to 1, but usually its 0.
This texture that breaks the continuous shore waves is generated procedurally, and is made of a bunch of randomly generated circular gaussian peaks which are initially generated (position, size, positive or negative amplitude), and then rendered into the texture over their lifetime, growing from 0 to peak amplitude and back. After the peak falls back to zero, new peak parameters are generated and the peak starts appearing somewhere else. These peaks correspond to the shore waves appearing and disappearing
Pixels in the texture are rendered using the following equation:
float v=0;
for each active peak:
//this is to make it seamless
vec2 p = abs(texcoords - peak_coords);
p = min(p, abs(p-1));
float d = dot(p, p);
v += amp * exp2(-d*inv_peak_size);