Repository navigation
v0.2.0
ge v0.2.0
Direct-mode polish across the iOS + Android matrix. Shipped pre-1.0; the public API surface remains fluid pending a future 1.0 freeze.
Added
- Cross-platform sensor contract.
DirectRenderHostrotatesSDL_EVENT_SENSOR_UPDATEdata from the device-hardware frame into the live UI frame before delivering it to games. Touch/mouse pass through unchanged (already UI-rotated by the OS). Engine emits true acceleration in screen frame; games own the acceleration→gravity sign flip. - iOS orientation lock for direct-render apps.
wire::SessionConfig.orientationplumbed intoDirectRenderHost::send, which now invokes theprefersInterfaceOrientationLockedswizzle intools/player_orientation_ios.mm(Apple TN3192). Combined with a narrowed Info.plist, gives deterministic launch orientation + post-launch lock on iPadOS 26+. - Dual bgfx renderer on Android. Both Vulkan and OpenGL ES 3.1 backends compile into the APK;
BgfxContextpicks one at runtime viaro.kernel.qemu/ro.hardwareprobes. Vulkan on the Apple-Silicon AVD emulator (where GLES 3.1 tripsEGL_BAD_CONFIG); OpenGL ES on real Adreno/Mali devices (where bgfx's Vulkan path stalls — seedocs/papers/adreno-830-bgfx-vulkan-crash.md). - Activity-lifecycle handling on Android.
BgfxContext::onBackground/onForegroundre-acquire the newANativeWindowafter the SurfaceView'sBufferQueueis destroyed/recreated.RenderHost::paused()short-circuitsbgfx::frame()while suspended. Hooked into SDL3'sWINDOW_FOCUS_LOST/RESTOREDevents (the high-levelDID_ENTER_BACKGROUNDfamily is iOS-only on SDL3). Single-threaded bgfx (BGFX_CONFIG_MULTITHREADED=0) ensures all swap-chain ops route through the gated main thread. - Renderer-aware shader paths. New
ge::shaderDir()andge::renderShaderDir()helpers return the right asset subdirectory at runtime. Module.mk emits parallel SPIR-V (shaders-spirv/) and GLES 3.1 (shaders-gles/) shader binaries; Android template'ssyncAssetsships both, the helper picks one per renderer. - TiltCal sample app. Quick-and-dirty SDL3 accelerometer calibration tool. Reads raw X/Y/Z and renders in monster pixel font, full-screen. Used to characterise the SDL3 sensor contract empirically across the iOS + Android matrix.
Changed
tools/android-template: enables Gradle configuration cache by default (org.gradle.configuration-cache=true). Skips the configuration phase on incremental builds; saves 5–50% of build time.- TiltBuggy sample: world physically 1/16 the original size with viewport-zoom compensating for visual layout, giving ~4× faster physics under unchanged 9.81 m/s² gravity. Renderer-side chassis size now derived from
scene.halfExtent()instead of hardcoded. Module.mkshader rules:shaders-gles/was misleadingly named (contained SPIR-V); split into truthfulshaders-spirv/+shaders-gles/outputs.tools/android-template/.../CMakeLists.txt.in: linksEGL+GLESv3(needed for the GLES backend); both bgfx renderers compiled in by default.
Fixed
- Android Samsung devices (S21 Ultra, Tab A9) no longer black-screen on TiltBuggy launch — the Vulkan path was stalling after the first present, GLES 3.1 path now used on real devices.
- Android apps survive being put into the background and resumed without losing the swap chain.
Pre-1.0 status
ge remains pre-1.0. Public C++ API additions in this release: ge::shaderDir, ge::renderShaderDir, BgfxContext::onBackground, BgfxContext::onForeground, BgfxContext::paused, RenderHost::paused, wire::kOrientation* constants exposed to games. All additive; no breaking changes.
See STABILITY.md for the full catalogued surface.