You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
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.