1use euclid::RigidTransform3D;
6
7use crate::{
8 Floor, HitTestId, HitTestResult, InputFrame, Native, SubImages, Viewer, Viewports, Views,
9};
10
11#[derive(Clone, Debug)]
15#[cfg_attr(feature = "ipc", derive(serde::Serialize, serde::Deserialize))]
16pub struct Frame {
17 pub pose: Option<ViewerPose>,
19 pub inputs: Vec<InputFrame>,
21
22 pub events: Vec<FrameUpdateEvent>,
24
25 pub sub_images: Vec<SubImages>,
27
28 pub hit_test_results: Vec<HitTestResult>,
30
31 pub predicted_display_time: f64,
33}
34
35#[derive(Clone, Debug)]
36#[cfg_attr(feature = "ipc", derive(serde::Serialize, serde::Deserialize))]
37pub enum FrameUpdateEvent {
38 UpdateFloorTransform(Option<RigidTransform3D<f32, Native, Floor>>),
39 UpdateViewports(Viewports),
40 HitTestSourceAdded(HitTestId),
41}
42
43#[derive(Clone, Debug)]
44#[cfg_attr(feature = "ipc", derive(serde::Serialize, serde::Deserialize))]
45pub struct ViewerPose {
46 pub transform: RigidTransform3D<f32, Viewer, Native>,
51
52 pub views: Views,
54}