Real-time lens blur in WebGL2/GLSL3 using phased complex convolution

This is a real-time lens blur effect based on the research of Olli Niemitalo. Like gaussian blur, it is circularly symmetric and linearly separable so that it is reasonably efficient to compute. It uses a phased convolution kernel consisting of multiple components, each outputting complex values.

The browser needs WebGL2 support to run the effect. Chrome and Firefox are tested to work on a GTX 1080, Radeon 5870 and Intel Iris 6100.

I originally wrote this effect in 2011 for use in size-optimized demoscene productions but it turned out to be a bit too heavy to be used with raymarching-based effects. I abandoned it, but dug it back out again to try adapting it to run on WebGL2. The code here is that same code with only minor modifications.