* We create fake backbuffer as SRGB if the original default backbuffer was
SRGB in the program.
* All of our output backbuffers are also SRGB, and we enable
GL_FRAMEBUFFER_SRGB when writing to them.
* Add the 'fake' srgb curve applied to linear data to display it as if it
were srgb, which tends to look intuitively correct even if it's not 100%
accurate. See the behaviour existing in D3D11 already.
* 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.
* This could be improved and moved further down, not all functions would
need a lock (only things modifying shared resources), but it suffices
for now.
* Even if the app only queries some subset of extensions, we may need
more (e.g. need the DSA extensions). GetRealFunctions does a
PopulateHooks which will fill out the extensions that we need.
* Normal selector functions are implemented via these, which requires
EXT_direct_state_access to be available, but this isn't hard to work
around with some wrapper functions should that become necessary.