* Annoyingly although Qt has an internal bool allowUserMoveOfSection0
which does exactly what we want allowing the tree column to be
movable, we can't enable it because it's private. So instead we have
to re-implement section moving ourselves.
* Minor tweak - also made RDTreeWidgets non-movable by default since
usually we don't want to allow it.
* There's a messy order-of-operations thing to deal with various
different themes, as well as a couple of minor problems, but at least
the highlight and selection bars draw fairly consistently and don't
leave an ugly gap over the branches.
* Instead of hacking in some data in unused fields in the output sig we
side-band the data we need to form the access chain.
* We also fix some issues with the SPIR-V generation for mesh dumping
that were caught by validation.
* When we add it, if a log is already open that's when we get the
callback to OnLogFileOpened to initialised. If we close afterwards,
we'll be in an inconsistent state.
* This still isn't perfect with some custom style stuff but it's next
to impossible to get working right. In theory we should manually
draw PE_PanelItemViewItem in the gap in drawRow() or so to make sure
we also draw any on-hover highlight over objects, but that doesn't
seem to work.
* It's not entirely clear if this is the intended fix, but otherwise
since we're not running QApplication::exec() the main event loop has
the same 'loop level' of 0 as the event level when it's fired. The
proper functioning seems to be that the posted deleteLater event
should have an event level of 1 which then means it will be processed
when coming back to the exec() loop level of 0, but since we don't get
that, just run it manually after all other events.
* If we create non-wrapped objects for debugging purposes like states
and scratch buffers, then this can interact poorly with the device
context which expects all objects bound to it to be wrapped.
* In particular if the pixel history is running and binds an unwrapped
rasterizer state, then tries to replay a draw which is a command list
execute the current device context pipeline state is saved (to be
restored at the end of the command list) and when querying the current
state an unwrapped object is found and everything blows up.
* There wasn't really a good reason for using unwrapped objects. The
primary reason to do so is to avoid polluting captures but little of
this code runs at capture time. We can also filter out debug-only
objects at replay time by ensuring only things with a valid original
ID are returned.
* Note we also need to allow for state objects in the capture to be
duplicates of debug states we created. We already handled this for
blend states but apparently not for other types of states.
* If you replayed an Execute and created the deferred stave state, and
then didn't replay the Finish (e.g. if an event in between was
selected) this would leak references and keep buffers alive after
shutdown.