Rework uniform setting. One would think something as mundane as setting a few uniforms wouldn't really mean much for performance, but seemingly this is not always so -- I had a real-world shader that counted no less than 55 uniforms. Of course, not all of these were actually used, but we still have to go through looking up the name etc. for every single one, every single frame. Thus, we introduce a new way of dealing with uniforms: Register them before finalization time, and then EffectChain can store their numbers once and for all, instead of this repeated lookup. The system is also set up such that we can go to uniform buffer objects (UBOs) in the very near future. It's a bit unfortunate that uniform declaration now is removed from the .frag files, where it sat very nicely, but the alternative would be to try to parse GLSL, which I'm a bit wary at right now. All effects are converted, leaving the set_uniform_* functions without any users, but they are kept around for now in case external effects want them. This seems to bring 1–2% speedup for my use case; hopefully UBOs will bring a tiny bit more.
Make number of BlurEffect taps configurable. This can be useful if you are using blur as part of a larger effect chain, where artifacts get masked by further processing. Request and initial patch by Christophe Thommeret, although the patch was redone from scratch.
Correct the number of blur taps read. We read about twice as many as we should have; the others were probably just set to 0.0, which has no effect but still burns arithmetic, unless your driver happens to optimize very aggressively for this (which I don't think anyone does anymore). Found by Christophe Thommeret.
Improve macro hygiene in .frag files slightly.
Reduce the amount of arithmetic in the BlurEffect shader a bit. We did additions and subtractions with zero, which is sort of a waste on scalar architectures. Helps ever so slightly on the demo app on my NVidia card (3–4%).
Replace LAST_INPUT with INPUT.
Flesh out the blur code a little. It actually blurs now, although it is not as pretty as I would like it.
Add vertical blurring, and fix a bug where not all taps would be used.
Make the blur into a simple, Gaussian horizontal blur. Still not very good.
Support multiple render phases (with FBOs and all), and make a sample blur effect that uses it.