To quote the Qt documentation for QFileDialog::setNameFilters:
> Note that the filter *.* is not portable, because the historical
> assumption that the file extension determines the file type is not
> consistent on every operating system. It is possible to have a file
> with no dot in its name (for example, Makefile). In a native Windows
> file dialog, *.* will match such files, while in other types of file
> dialogs it may not. So it is better to use * if you mean to select
> any file.
Admittedly, one of these usages is Windows-only and we are using the
native file dialog there, but we might as well be consistent.
Instead of manually specifying the default extension, just grab the
first one from each filter. We can only specify one at a time, so
update it whenever the selected filter changes.
* Intel's drivers in particular seem buggy when trying to reflect
shaders, so there's no point in reflecting shaders that aren't from
the capture as all we do is add the potential for crashes.
In most of these cases, the open file dialog won't even display a file
without the proper extension, so this helps ensure the user doesn't
accidentally misplace their files. The one exception is *.rdc, which
could be found without the extension, but could not be opened.
* The former is only needed inside tp_init of a new object. Instead when
we want to pass in and own a pointer, we use SWIG_POINTER_OWN.
* This also removes the need to pass 'self' all the way down in
ConvertToPy which tidies up a lot of code.
* With the log append setup, printing lines and newlines separately can
lead to them being interleaved between multiple processes writing to
the same log.
* This way the lines in a print could still be scattered, but without
over-allocating to modify newlines in place (which would be more
expensive too) this can't be fixed, and both multi-line prints and
multiple processes writing a lot of log prints are rare.