Existing "selector" mode (which was unused and has been used to
implement ORM textures has been renamed to metallic-roughness, and new
modes have been added for occlusion and occlusion-metallic-roughness.
New GLSL input names have been added. The .egg format has been
extended. The Assimp loader has been updated. The shader generator now
handles occlusion maps, and a unit test for that is added.
This is the non-legacy way to ship native libraries nowadays, leaving them in the .apk so that there doesn't need to be an extraction step and the app takes up less space.
The blob is now stored in a raw resource, so no longer duplicated between each architecture
Setting extractNativeLibs:false doesn't yet work, the remaining step is somehow getting Python to load extension modules that are still part of the apk
This changes the use of sys.executable to sys.platlibdir, which requires Python 3.9+ (but that's probably okay since Python 3.8 is EOL)
Python 3.13 has proper official Android support, including built-in stdout/stderr redirection, but it only does so if sys.executable is not set
When a frame is dropped, the previous non-dropped frame is considered to be repeated, but the strip chart would compute new cached frame data for it, causing performance to be unusably slow at high frame rate data gathering even when most frames are skipped
This makes performance remotely usable in that situation
As workaround for https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/2029, we manually create a GtkFlowBoxChild instance and attach the label to it and increase its reference count so it it not prematurely destroyed when removed from the GtkFlowBox, causing the UI to segfault.
Menus would only update properly if there was a strip chart open that would cause the PStatView to be updated
Calling `check_update()` in `new_collector()` doesn't work properly because the views haven't been updated there yet; calling `do_update()` there does work around it but I think the better fix is just to make sure we always update the view so that the `check_update()` (which is also called by `idle()`) works properly
This is more idiomatic, simplifies the code, makes it easier to port to eg. HPy later on, and makes it easier to use the limited ABI (where it can be optimized to a tail call) later on
A polyfill is provided for compatibility with Python versions 3.8 and 3.9