Returns list of _all_ extensions reported by the driver, even those that
are not supported in Magnum and also those that are marked as disabled
due to driver bugs. Usable mostly when doing fresh port to new platform
to discover possible new features.
The actual implementation was part of Context constructor (and now this
function is called instead). It is rather ugly because we need to take
care of both GL 2.1 and GL 3.0 (and also ES2 and ES3).
Do I really need to have everything uniquely prefixed with
uncomprehensible names to defend myself from headers that were made by
careless people two centuries ago?! Rage level +37.
The functions were there all the time, I just didn't try hard enough to
find them. The special keys now have different values (the lower 16 bits
are reserved for ASCII), but it is a source-compatible change.
Each class should now have *everything* needed in its documentation,
nothing is left out. Most of the text was taken from README in
magnum-bootstrap repository.
Make it less annoying to debug things on platforms which send all
standard output to /dev/hell without any easy way to override that. Yes,
I'm looking at you, Android.
There is no ES 2.5 or 3.01 and this way we can properly check for
garbage returned by `glGet(GL_VERSION_M*OR)` (e.g. version 2674.-2O8539
would pass here).
Currently named as "removed" until I find a word which is *even* amount
of characters shorter than "supported" ("disabled" is not and it looks
ugly). Also marked extensions that can't be supported in current GL
version with "n/a" instead of "---".
Previously the extensions were either disabled altogether (e.g. because
we don't have yet extension wrangler on ES) or had manually adjusted
minimal required versions to avoid issues on older versions (e.g.
ARB_explicit_attrib_location is known to give compiler errors when used
with GLSL < 1.50 on some drivers), both done basically at compile time
unrelated to actual hardware/driver used.
Now all the extensions are enabled exactly as the driver advertises them
(or when their core version is not larger than the context version) and
have minimal required versions as per specification. Given extension is
supported in given version when it is marked as such and its minimal
required version is not larger than the requested one. The extension
disabling is thus done by simply increasing the minimal required version
to larger value (or Version::None for disabling it for all versions).
Currently no such disabling is put into place, but the existing
workarounds scattered all over the place will be gradually converted to
this.
Simplified the code and tests by marking all extensions from previous
versions as supported instead of additional "shorthand" checking whether
extension's core version is supported. The check wasn't probably much of
a speedup, as it was just another branch. This was also buggy
previously, because when the extension would be reported as not being
supported in older versions, which is not what we want. Hopefully this
won't reintroduce the numerous issues with Mesa and OSX I had in the
past :-)
Also removed duplicate implementation of
Context::isExtensionSupported(), one overload is now calling the other.
GCC 4.7 cannot detect proper overload based on arguments in initializer
list constructor of some type, thus we need to provide explicit overload
taking std::initializer_lists.
Found thanks to (probably otherwise useless) GCC warning about usage of
deprecated function . Clang didn't emit such warning, because
even deprecated function should be able to call itself recursively.