Remove the check for movit_shader_rounding_supported, as we now demand 1.30 unconditionally.
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.
Fix some typos that would cause the sampler number not to be incremented. Found by Christophe Thommeret, who also noticed these are most likely harmless since both effects with the bug are typically last in their chain.
Switch from using GLEW to epoxy. The main reason is that we would like to support GL 3.2+ core contexts, and then later quite possibly GLES.
Remove GL_LUMINANCE in more places. Causes problems with GL 3.2+ core contexts. Found by testing on ATI.
Move everything into “namespace movit”. This is a pretty hard API break, but it's probably the last big API break before 1.0, and some of the names (e.g. Effect, Input ResourcePool) are really so generic that they should not be allowed to pollute the global namespace.
Explicitly declare use of round() as an #extension. round() is not part of GLSL 1.10, so we need to check explicitly for it before we can use it. Reported by Dan Dennedy.
Another round of include-what-you-use.
Move to 'using namespace std;' in all .cpp files. There's no intrinsic value to writing std:: over and over again. We keep it in the .h file, of course, in order not to pollute clients' namespaces.
Round explicitly after dithering, for GPUs that don't do it properly themselves. This was causing unit test failures in the DitherEffect unit test both on ATI and nVidia GPUs; Intel also rounds somewhat inaccurately, but much, much better, so the extra code won't be activated for them. I think this might be driver-dependent, but we will detect it correctly in any case.
Split out some private utilities into effect_util.cpp, so we do not need to include e.g. Eigen from effect.h.
Run include-what-you-use over all of movit. Some hand tuning.
Add some parameter asserts in DitherEffect, too.
Change to using GLEW everywhere. We could have done this on Windows only, but it's just as simple to keep the dependency list equal on all platforms. This subsumes our own extension-checking logic, too.
Make the dither effect cheat a small bit and use a repeating dither texture no greater than 128x128, to save memory bandwidth.
Add an implementation of RPDF dither on the final output.