* If you're capturing and replaying on the same driver it's insanely
unlikely that this translation will be anything other than the identity
map, although it wouldn't be illegal to renumber locations. However this
should allow moving captures between vendors/driver versions/platforms,
which in the past wasn't possible because locations would change (quite
validly) when the programs were recompiled. There might be other issues,
but at least this one is fixed.
* This means that all APIs pass byte string types. ALL strings everywhere
in the entire codebase must be assumed to be and treated as UTF-8 content
not ASCII.
* Gets rid of all the horrible %hs specifiers that caused warnings on
linux! Hooray.
* We convert to wide strings, or use wide characters, only when necessary
to use the Win32 API. Some windows specific code will stay in wide chars
just for convenience.
* Files are already serialised as UTF-8 strings for linux/windows binary
compatibility, so this change doesn't break backwards compatibility.
* For now we just store the highest core version and only re-fetch the
extensions when we see a context of a higher version that before. This is
just working off the assumption that there might be a low-version context
(especially on windows where it's necessary before getting a 3.2+ core
context), but otherwise all contexts will be the same level.
* Previously we were saving every program uniform that got set,
cumulatively.
* Now, whenever a uniform is set that program is marked as dirty and we
fetch out the uniform values at the start of the frame and serialise them
out.
* On replay, we create a dummy copy of the program to hold the initial
uniform values, and copy them across to restore the frame-start values.
* GLenum enum now lists all GL_ before GLX_ and WGL_ to give priority for
string representation.
* Also dropped eGL_UNKNOWN_ENUM for eGL_NONE as it's a little friendlier