Skip to content

v0.2.0

Choose a tag to compare

@marcelocantos marcelocantos released this 02 May 11:15
· 167 commits to master since this release
299b9ee

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. DirectRenderHost rotates SDL_EVENT_SENSOR_UPDATE data 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.orientation plumbed into DirectRenderHost::send, which now invokes the prefersInterfaceOrientationLocked swizzle in tools/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; BgfxContext picks one at runtime via ro.kernel.qemu / ro.hardware probes. Vulkan on the Apple-Silicon AVD emulator (where GLES 3.1 trips EGL_BAD_CONFIG); OpenGL ES on real Adreno/Mali devices (where bgfx's Vulkan path stalls — see docs/papers/adreno-830-bgfx-vulkan-crash.md).
  • Activity-lifecycle handling on Android. BgfxContext::onBackground / onForeground re-acquire the new ANativeWindow after the SurfaceView's BufferQueue is destroyed/recreated. RenderHost::paused() short-circuits bgfx::frame() while suspended. Hooked into SDL3's WINDOW_FOCUS_LOST / RESTORED events (the high-level DID_ENTER_BACKGROUND family 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() and ge::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's syncAssets ships 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.mk shader rules: shaders-gles/ was misleadingly named (contained SPIR-V); split into truthful shaders-spirv/ + shaders-gles/ outputs.
  • tools/android-template/.../CMakeLists.txt.in: links EGL + 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.