diff options
author | Martin Robinson <mrobinson@igalia.com> | 2025-01-30 20:07:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-30 19:07:35 +0000 |
commit | 534e78db5331fbfbad7e60d72a88e9aacdc11ee4 (patch) | |
tree | 3bcd217e0e7b7fd0c91d5406a81ea241ffc4ce06 /components/shared/webxr/frame.rs | |
parent | 64b40ea70065f949d1e281bd046c56d50312f2a7 (diff) | |
download | servo-534e78db5331fbfbad7e60d72a88e9aacdc11ee4.tar.gz servo-534e78db5331fbfbad7e60d72a88e9aacdc11ee4.zip |
Merge webxr repository (#35228)
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Diffstat (limited to 'components/shared/webxr/frame.rs')
-rw-r--r-- | components/shared/webxr/frame.rs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/components/shared/webxr/frame.rs b/components/shared/webxr/frame.rs new file mode 100644 index 00000000000..2589953ecba --- /dev/null +++ b/components/shared/webxr/frame.rs @@ -0,0 +1,60 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::Floor; +use crate::HitTestId; +use crate::HitTestResult; +use crate::InputFrame; +use crate::Native; +use crate::SubImages; +use crate::Viewer; +use crate::Viewports; +use crate::Views; + +use euclid::RigidTransform3D; + +/// The per-frame data that is provided by the device. +/// https://www.w3.org/TR/webxr/#xrframe +// TODO: other fields? +#[derive(Clone, Debug)] +#[cfg_attr(feature = "ipc", derive(serde::Serialize, serde::Deserialize))] +pub struct Frame { + /// The pose information of the viewer + pub pose: Option<ViewerPose>, + /// Frame information for each connected input source + pub inputs: Vec<InputFrame>, + + /// Events that occur with the frame. + pub events: Vec<FrameUpdateEvent>, + + /// The subimages to render to + pub sub_images: Vec<SubImages>, + + /// The hit test results for this frame, if any + pub hit_test_results: Vec<HitTestResult>, + + /// The average point in time this XRFrame is expected to be displayed on the devices' display + pub predicted_display_time: f64, +} + +#[derive(Clone, Debug)] +#[cfg_attr(feature = "ipc", derive(serde::Serialize, serde::Deserialize))] +pub enum FrameUpdateEvent { + UpdateFloorTransform(Option<RigidTransform3D<f32, Native, Floor>>), + UpdateViewports(Viewports), + HitTestSourceAdded(HitTestId), +} + +#[derive(Clone, Debug)] +#[cfg_attr(feature = "ipc", derive(serde::Serialize, serde::Deserialize))] +pub struct ViewerPose { + /// The transform from the viewer to native coordinates + /// + /// This is equivalent to the pose of the viewer in native coordinates. + /// This is the inverse of the view matrix. + pub transform: RigidTransform3D<f32, Viewer, Native>, + + // The various views + pub views: Views, +} |