I guess the trickiest part is fluid dynamics. Are you using a physics/fluid sim or handrolling your own?
What I do instead is to transform a procedural plane mesh into wave-like geometry. For added realism, I base this transformation on bathymetry data (ocean floor height), so you can get left/right breaking waves, different breaking sessions, etc, just by defining different heightmaps.