Input
The Renderer contract receives the existing winit input helper for ordinary desktop input. Touch is separate and deliberately semantic-free.
warp_core::input defines:
TouchPhase:Started,Moved,Ended, andCancelled;TouchContact: a stableid, phase, physical pixel position, and normalized coordinates;TouchFrame: the surface size and contacts accumulated since the previous rendered frame.
Projects decide whether a contact is a button, camera gesture, joystick, or something else. Warp does not encode game-specific control policy. The Android tracker preserves IDs across movement, supports multiple simultaneous contacts, and emits cancellation edges before suspend so a resumed surface does not inherit phantom held controls.
The project hook is optional:
fn touch(&mut self, frame: &warp_core::input::TouchFrame) { }