* This avoids rebuilding swig every time if some internal cpp in the
renderdoc target changes, but will still rebuild it if the interface
headers change.
* Added a couple of utility macros to help with the conversion. lit() is
paired with tr() for untranslated text.
* QFormatStr is more explicitly for non-textual formatting strings.
* Both are just #define'd to QStringLiteral()
* It's annoying to have the constant buffer view reset and collapse
everything, especially if moving between draws where the variables are
the same because the shader hasn't changed.
* We can just compare the previous set of variables to the new set and
if the types and structures (member variables etc) are the same, then
just update the values in-place.
* By default VS creates a huge section of properties copy-pasted for
every Configuration|Platform combination, which is almost all the
same for each one.
* We instead create a common section with most of the properties that
are fixed, and then override/add to them for the few that vary (e.g.
optimisation settings for release, preprocessor macros).
* Tacking -official onto the git hash was a hack only needed on windows,
and since we want more information it doesn't scale.
* Instead we track anything we need to know about the version in
separate variables, like whether it's a stable build or a nightly/
local build. Or if it's built by a downstream distribution then the
version number for the downstream build.
* Since we're promoting everything, we reset the behaviour of
RDTreeWidget so that it's not doing anything different by default.
* RDTreeWidget's interface is a bit different, exposing some useful
things like a single selected item and so on.
* We also can't set columns in the Qt Creator UI anymore, so we set them
from code.
* We add our own custom item model to handle the cases we need. We can
also make a few assumptions and optimisations around things we can
safely assume like e.g. nodel columns won't really change after init.
* This lets us have full control over batching updates, which was the
main motivation, but it makes it easier to extend in future (e.g.
adding single per-item tags instead of the heavyweight Qt::UserRole
data elements).
* VAX can get confused by the QT_NAMESPACE macro, and if it thinks Qt
objects are inside a QT_NAMESPACE namespace then various things will
break but most commonly the ui objects inside that namespace won't be
picked up properly.
* See https://forums.wholetomato.com/forum/topic.asp?TOPIC_ID=12573