* This is a bit complex. If an application has a global symbol e.g.
GLENABLE glEnable; as their function pointers that they fill out from
glXGetProcAddress, then OUR glEnable global function gets replaced with
that symbol. It's weird. But it means crashes if we try and return the
address of that symbol as a function pointer.
* However it's also possible to get the reverse problem - if an application
has a shared library that has those symbols expecting them to be function
pointers, those symbols will get overridden with our global functions
and it will mean an instant crash when they try to assign to those func
ptrs.
* I'm not sure if there is an ideal fix to this Catch-22, as we also need
to export these bare functions in case someone just plain links against
libGL and expects them to be there, with no GetProcAddress/dlsym funny
business.
* You can choose which component will be used as 'position' when rendering
vertex inputs. Helpful if a position component isn't auto-detected, or
if you want to render UV co-ordinates onto the screen.
* Instead of fixed TEXCOORD0/Color options for solid shading onto the mesh
you can choose a secondary column yourself.
* Also the solid shading options are available on vertex output meshes as
well as inputs.
* Crash report was submitted indicating a crash here, which is either
memory issues or momentarily crazy-large window. We can catch the
exception and just clear to black.
* Until I have a sample that uses it, I'm not going to attempt to serialise
the tiled resource API. It has a lot of other potential knock-ons too
(e.g. to initial contents).
* 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.
* GL_TEXTURE_COMPRESSED_IMAGE_SIZE glGet value gives you the size for all
faces on this mip, but we fetch the image data face-by-face, so it needs
a /6.