* Only one major piece of functionality is unimplemented and stubbed out
- WriteToSubresource and ReadFromSubresource in concert with passing
a NULL D3D11_MAPPED_SUBRESOURCE parameter to ID3D11DeviceContext::Map.
* e.g. class instances only crazy people use, so there's no point to have
it eating up a ton of space when 99.9% of the time it's empty. Also
the border colour in samplers is only listed if the addressing is set to
use the border colour.
* I also collapsed down some of the columns to make it a little simpler
visually, like min lod/max lod become just "lod clamp" with a range, and
constant buffers simplified down to a couple of columns.
* 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 APIs where the shader namespace/bindpoint (which may be arbitrary
like 'the Nth texture resource' can be mapped, at each event, to the
actual API bind point where the object is.
* On D3D11 this is pass-through, on GL this returns the value of each
uniform.
* This also means GL shader reflection structures are properly immutable
and the variance in the uniform values is handled elsewhere.
* In future this might need to be expanded to support more complex binding
methods, where the mapping returns the resource rather than just mapping
to an integer bind ponit.