Add support for multiple shader models. We support 1.10 (for OpenGL 2.1 cards), 1.30 (for OpenGL 3.2 core contexts), and 3.00 ES (for GLES3). There's some code duplication, but thankfully not a whole lot. With this, we compile in core contexts without any warning from ATI's driver, and should also in theory be GLES3 compliant (tested on NVidia's desktop driver).
Merge branch 'master' into epoxy Conflicts: Makefile.in README movit.pc.in
Keep FBOs around in EffectChain again. Seemingly creating and deleting them is crazy expensive on NVidia (~3 ms for a create/delete pair), so 6dea8d2 caused a performance regression at high frame rates. Now we instead keep one around per context (they cannot be shared), which brings us basically back to where we were performance-wise. Reported by Christophe Thommeret.
Merge branch 'master' into epoxy Conflicts: Makefile.in configure.ac
Add an FFT convolution effect. A lot of the later commits have been leading up to this, and I finally got to the point where all the unit tests check out, everything seems to work (modulo maybe some overflow issues) and we have a model that matches what people actually expects from convolutions. Note that this adds a dependency on FFTW3; we could probably have added our own routines for such small needs, but like with Eigen, calling out to a library is fine as long as it's of good quality (which FFTW certainly is) and is widely available.
Merge branch 'master' into epoxy
Add an effect to do re-slicing of the image, for overlap/discard. This is another step on the way to making FFT convolutions useful.
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.
Use VAOs to bind the VBOs. Needed for OpenGL 3.2+ core context support. Also refactor a bit, since the amount of boilerplate was getting over the top.
Use abort() on check_error() failure. This makes it much easier to trace them down in a debugger.
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.
Make util.h private to the effects; instead, defs.h contains what effect.h needs. Keeps some junk out of the namespace of the client.
Prefix include guards with _MOVIT to avoid clashes with external files.
Run include-what-you-use over all of movit. Some hand tuning.
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.
Add (safe) asserts around all Effect::set_* return values, and add warnings for not checking them.
Make combine_two_pixels() handle the fact that the GPU has limited subpixel interpolation precision. Currently we only use it to somewhat improve the total_weight estimate to reduce the error slightly. However, the function can now also return the total error estimate, which will be useful for knowing when we can and cannot combine weights with reasonable error.
Do not inline combine_two_samples(); util.h has way too many files depending on it, leading to poor incremental compile times.
Factorize the code to compute sampling points for bilinear sampling into a shared function, and support negative weights.
Convert from our home-grown matrices to Eigen all over.