aboutsummaryrefslogtreecommitdiffstats
path: root/components/shared/webxr/frame.rs
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2025-01-30 20:07:35 +0100
committerGitHub <noreply@github.com>2025-01-30 19:07:35 +0000
commit534e78db5331fbfbad7e60d72a88e9aacdc11ee4 (patch)
tree3bcd217e0e7b7fd0c91d5406a81ea241ffc4ce06 /components/shared/webxr/frame.rs
parent64b40ea70065f949d1e281bd046c56d50312f2a7 (diff)
downloadservo-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.rs60
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,
+}