* By default cmake will print huge scary warnings if the packages aren't
available instead of silently continuing and letting us check, which is a bad
default for optional packages.
* QNetworkAccessManager is supposed to be asynchronous and threaded internally,
but calling get() the first time can take multiple *seconds* while it
initialises proxy data and loads ssl libraries.
* Qt's threading rules are so strict it's impossible to feasibly move
QNetworkAccessManager to another thread.
* Instead we use Qt's cross-thread signals and slots to move the whole thing
into a wrapper object. It's stupid.
* If we default to D3D11 at construction time, if we have persist data (very
likely) and it's for another API then we'll have to destroy the D3D11 viewer
and recreate the other API's viewer.
* We tune the pipeline state view and texture viewer to only iterate over a
small list of dynamically used binds in the (vastly more common) case where
unused binds are not being shown.
* This simplifies the code flow because we can be sure that we always have
cached read-only/read-write resources (this was true before, but now it's
clear).
* Using the auto-resizing mode of RDHeaderView resizes based on the whole column
every time, which is wasteful when only a few lines are added to a large log.
* We also reverse Python_ADDITIONAL_VERSIONS so it finds the newest one. It
doesn't seem like there's a way in general to make these match, so we hope
that searching from newest to oldest will find the same in both - or at least
it makes it easier for the user to fix by installing the newest in both.
* It seems like packaging of these two is inconsistent, and pyside2 dev files
being available doesn't always imply shiboken2 dev files are present. Be safe
and check both.
* When the pyside2 we ship was built it accidentally included a small dependency
on Qt5Qml, which we don't distribute so the pyside2 libraries wouldn't load.
* We can generate a tiny stub with the right exports and load it manually from
the PySide2 folder on 32-bit qrenderdoc builds to allow pyside2 to load
subsequently. The stub source is tiny, and added alongside.
* Putting it in the PySide2 folder means that even if someone puts RenderDoc's
build folder in their PATH, our stub Qt5Qml won't break anything because it
won't be loaded. If they put PySide2 in the PATH it might, but then it's their
fault!
* Newer Qt versions will base64 the byte arrays even if we've already base64'd
them so they're safe. To prevent this we explicitly convert to QString
afterwards.
* Non-integer DPI handling is fundamentally a broken concept, because UIs are
essentially pixel art with some vector drawing. Rounding down half fractions
seems to be a better tradeoff than rounding up or trying to render them as-is.
* This is still accurate, what we're missing is "read data as int, then cast to
float" which is represented by setting 'floatCast' to true. A normalized cast
or interpret is accurately represented by saying the input is snorm/unorm
typed.
* We work around a GNOME bug here by ignoring a selected filter if it's the
empty string. For all other unknown filters we try to determine the suffix on
the fly.