There will be numerous additions to this one so it made sense to make it
a static library instead of a header-only library. That also allows
CMake users to just link to Magnum::OpenGLTester instead of going
through the pain of a huge branching in order to find a correct
windowless application just to run their tests. It could have been done
even without the static library using a INTERFACE target, but that
wouldn't work on CMake < 3.0 (which, unfortunately, quite a few people
are still stuck with).
Unfortunately it's already heavily used elsewhere so I had to go through
the pain of deprecating the old implementation. The old implementation
was header-only so it can't be just typedef'd to the new one as there
would be linker failures. So the old header is just kept as it was, with
only the macros reduced.
Currently just does per-pixel comparison and calculates absolute delta,
failing the comparison if max/mean delta threshold is above specified
values. Useful enough for the case I have right now, might fail in other
case -- but still better than whatever else I was using before :)
Most of the code is in the actual test where I'm comparing and
benchmarking three different implementations (a
naive/straightforward/ground-truth one, the chosen one and a fast though
cache-spilling table-based one) to ensure the behavior is consistent
across all of them and that the performance is within reasonable bounds.
The Corrade::TestSuite benchmarking stuff needs serious improvements,
though.
To be more consistent with GLSL naming. Also, the original naming was
quite misleading, as normalize() is used in GLSL for something
completely different.
If building with deprecated APIs, the Functions.h header includes the
new Packing.h header and the {de,}normalize() functions are defined as
deprecated aliases to the new functions. This will be removed at some
point in the future.
The test is running pretty slow on debug builds, though (sorry). I see
no way how to make it faster while still exposing the issues with
std::accumulate().
MeshTools and Shaders dependencies are needed only if either the Shapes
or SceneGraph library is compiled, Primitives are needed only if the
Shapes library is compiled.
I found a way how to hack cmake_dependent_option() beyond just
specifying a list of things AND-ed togeter -- if one uses spaces instead
of `;`, all the contents are passed to a single if() statement and it's
possible to use parentheses, AND, OR and all other stuff.
Now, WindowlessEglApplication is implicitly enabled if targeting
non-desktop ES and magnum-info utility is enabled, because magnum-info
depends on it in that case. In all other cases it is implicitly disabled
with ability to enable it.
WindowlessGlxApplication is now available only when targeting desktop GL
or desktop GLES and is implicitly enabled when magnum-info or any other
GL utility is enabled.