* The docs now explicitly tell people how to write UI scripts, then UI
extensions, with as quick a start as possible, and go into detail in later
documents. Use of the python module directly is also not featured prominently
as this is a rare use-case for casual scripting needs.
* If there's a very tight loop there could be a _lot_ of updates to the point
where the UI takes longer to redraw than the script does to step a line.
Updating at 100Hz is still plenty fast.
* This was previously only relevant for DXBC shaders that could have source
debug information but didn't prefer source debug unless optimisation was
disabled. This is inconsistent with how things are handled on SPIR-V and DXIL
and in general it's considered now that the benefits of debugging in source
outweigh the problems of debugging optimised code.
* The worst one was Persistant -> Persistent. This involved renaming
PersistentConfig but the impact of that is considered minimal enough to be
worth fixing.
* We enforce default and copy constructors where possible, this isn't very
pythonic but we can't use copy.deepcopy on our types.
* The structs that have specialised constructors e.g. FloatVector or Subresource
also have those documented though we have no way to enforce it.
* Python can't properly document fully independent overloads, only default-
parameter type overloads. Moving the tag to last as an optional parameter
means we can eliminate the different variants.
* For cleanliness in C++ code we make an internal variant that swaps the
parameters, since it is much cleaner to have a lambda callback as the last
parameter.
* This is necessary as they expect to be run on the UI thread, but can be
fetched from python scripts running on the python script thread. We block
invoke over to the UI and suspend python's GIL to avoid deadlocks.
* This doesn't cover all cases but helps with 'pythonic' cases where a list
returned from a function should be expected to be mutable. Modifying direct
'members' can still modify through const.
* We let it run after any change unconditionally rather than stopping/starting
it. Instead if it fires and we ar in the middle of an autocomplete we just
ignore that instance.
* The code by default will recreate/move/resize the autocomplete box when re-
initialising and there's no way to just update the list without doing so.