- App pause/resume: Stop camera capture on background transition and
restore on foreground, preventing resource leaks
- Row stride: Handle pixel buffer row stride != width to prevent
data corruption on devices with padded buffers
- Device lock: Track lock state and properly unlock on deactivation
- Input/output validation: Check canAddInput/canAddOutput before
adding to capture session, with proper cleanup on failure
When a .a or .xcframework path is requested but not found on disk (because
it is already statically linked into the binary), the previous code set
`path = String()` and fell through to `dlopen("")`, which is undefined
behavior and bypasses the RTLD_SELF symbol lookup table used by
`get_dynamic_library_symbol_handle`. This caused GDExtension loading to
fail silently or with ERR_CANT_OPEN when building with vulkan=no on iOS.
Fix by returning RTLD_SELF early, consistent with the existing empty-path
case at the top of the function.
This will allow decoupling `display_server.h` from a number of headers in the
codebase which only require those enums and not all the DisplayServer API.
The SwiftUI lifecycle wraps GDTViewController in a hosting controller
that becomes the window's root VC. iOS queries the root VC for
preferredScreenEdgesDeferringSystemGestures, prefersHomeIndicatorAutoHidden,
and prefersStatusBarHidden, but the hosting controller doesn't delegate
these to child VCs. This propagates the preference implementations onto
the root VC's class at runtime using class_addMethod.
- Removes `native_menu.h` dependency from `display_server.h`.
It's now forward-declared in all DisplayServer implementations and should
be included in the .cpp's.
- Removes some unused `rb_set.h` and `rb_map.h` dependencies, which leads to
having to include them explicitly in half the scene and editor codebase...
which shows how much we depend on `display_server.h`.
- Forward-declare `input_event.h`, so now we need only `keyboard.h`.
This PR:
- Fixes the orientation detection logic on Android
- Adds an orientation_changed signal in DisplayServer
Co-Authored-By: bruvzg <7645683+bruvzg@users.noreply.github.com>
The logic used to determine whether to invoke the in-memory registration or to
delegate the loading of a library is incorrect for xcframework packages - as
these can contain either static or dynamic libraries.
This change instead lets the operating system handle the library request, and if
it fails, it attempts to load from the internal registry.
With this change, xcframeworks containing dynamic libraries work without
workarounds on iOS.
With an additional fallback case courtesy of @bruvzg
This fixes https://github.com/godotengine/godot/issues/112783
- Introduces a SCons builder for Swift files
- Increases the minimum deployment targets to iOS 14.0, and visionOS 26.0.
- Replaces manually UIWindow management by a SwiftUI instantiated app.