Skip to content

v0.90.0

Choose a tag to compare

@marcelocantos marcelocantos released this 28 Jul 10:04
· 40 commits to master since this release
3b36164

Added

  • Hint-driven synthetic touch input (🎯T177) — ge::hint::InputDriver (<ge/hint_input.h>): a strictly opt-in second consumer of a gesture-hint timeline that converts the same interpolated pointer states the hand renderer draws into synthetic SDL finger events (down/motion/up; pinch = two fingers), injected through the app's production event path. A demo therefore exercises real input handling — a driven tap presses an actual ge::Button, a driven drag rotates an actual GlobeController — with zero game-side correlation code and no drift from the drawn gesture. Synthetic events carry a reserved touch id and finger-id range (isSyntheticFinger) so games can filter consequences; cancel() lifts held fingers cleanly; tag ordering guarantees snapshot-at-contact precedes the input applying. Presentation never implies driving. Demonstrated live in tiltbuggy (HINT=tap HINT_DRIVE=1).
  • ge::spriteFromRgba (🎯T176) — the internal RGBA8→Sprite upload promoted to public API, with the game-thread-only contract documented in one place.

Changed

  • Thread-safe text rasterisation (🎯T176) — architected from FreeType's documented contract: one shared FT_Library with a mutex only around face create/destroy; lock-free glyph rendering on per-call faces; a write-once shared font-bytes cache that FT_New_Memory_Face maps without copying (the FontRef path now reads each font from disk once per process instead of per call). rasterizeTextToPixels is callable from any thread, concurrently — verified by an 8-thread byte-identical concurrency test — and rasterizeText is a thin composition of it plus spriteFromRgba.

Notes

  • 🎯T177's yourworld2 onboarding validation and the 🎯T178 scenario layer (steps, anchors, verdicts, interruption policy, per-sink opt-in coupling) are the tracked follow-ons.