* This has some possible problems - e.g. if one copy of qrenderdoc is closed and
kills the server used by another copy. However it seems impossible to reliably
manage adb and we need to ensure we don't leave the process lingering around.
* At the moment 95% of users don't use android, so it's most important that they
have a smooth experience.
* This was the cause of problems around updating versions because adb.exe would
hang around and then be 'in use' and not able to be overwritten.
* This would affect anything that displayed more than 16MB of buffer data in the
UI, as well as replay proxying with the remote server displaying more than
16MB of buffer data.
* RTLD_NEXT won't work if the library is loaded via RTLD_LOCAL (which the vulkan
loader does). So instead we should keep the actual handle via a registered
library hook and use that.
* It's perfectly valid to have a vertex buffer in slots 0 and 4 with nothing in
between, so we should be sure to skip any invalid vertex buffer bindings.
* The event browser called SetEventID from OnCaptureLoaded, which would then
call OnEventChanged on all viewers, which if they kicked off work could happen
at the same time as the later call to OpCaptureLoaded for them.
* In the mesh viewer this seemed to lead to a race condition and had a chance to
corrupt memory.
* Check for EXT_sRGB_write_control extension before enabling. The equivalent
extension EXT_framebuffer_sRGB on desktop GL has been core since 3.1.
* Look for EGL_KHR_gl_colorspace extension and request an sRGB surface when
creating window surfaces.
* Environment variables are not user-friendly, but I don't want to promote this
to a capture option since it's so niche.
* In future perhaps it will be feasible to support selecting an arbitrary API
to capture, or even capturing multiple APIs simultaneously - though with GLES-
on-GL that will be quite difficult.
* On windows we can load libEGL which then loads opengl32.dll, so we ensure that
opengl32.dll is loaded first at startup rather than have it appear last-minute
in a recursive call.
* Likewise, when using EGL we forcibly forget all GL function pointers and fetch
them through eglGetProcAddress, rather than having a mix-and-match dispatch
table.