diff --git a/Cargo.lock b/Cargo.lock index ee77709da883..5bca4f79fd17 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6471,7 +6471,7 @@ dependencies = [ [[package]] name = "webxr" version = "0.0.1" -source = "git+https://github.com/servo/webxr#a73b150f1e1a946fd90bd1ccf0056e35c3eef0d2" +source = "git+https://github.com/servo/webxr#3f754a11eb3e9771f6020ec5a25ae94ed1e11f07" dependencies = [ "android_injected_glue", "bindgen", @@ -6494,7 +6494,7 @@ dependencies = [ [[package]] name = "webxr-api" version = "0.0.1" -source = "git+https://github.com/servo/webxr#a73b150f1e1a946fd90bd1ccf0056e35c3eef0d2" +source = "git+https://github.com/servo/webxr#3f754a11eb3e9771f6020ec5a25ae94ed1e11f07" dependencies = [ "euclid", "ipc-channel", diff --git a/components/script/dom/xrframe.rs b/components/script/dom/xrframe.rs index 68896b21de6d..fbb6890baf3f 100644 --- a/components/script/dom/xrframe.rs +++ b/components/script/dom/xrframe.rs @@ -85,11 +85,16 @@ impl XRFrameMethods for XRFrame { } else { return Ok(None); }; + let viewer_pose = if let Some(pose) = self.data.pose.as_ref() { + pose + } else { + return Ok(None); + }; Ok(Some(XRViewerPose::new( &self.global(), &self.session, pose, - &self.data.views, + viewer_pose, ))) } diff --git a/components/script/dom/xrreferencespace.rs b/components/script/dom/xrreferencespace.rs index 3d05a59564ca..0936b33fe6dc 100644 --- a/components/script/dom/xrreferencespace.rs +++ b/components/script/dom/xrreferencespace.rs @@ -113,7 +113,7 @@ impl XRReferenceSpace { // get_viewer_pose(eye_level) = get_pose(eye_level).inverse() * get_pose(viewer_space) // = I * viewer_pose // = viewer_pose - let viewer_pose: ApiViewerPose = cast_transform(base_pose.transform?); + let viewer_pose: ApiViewerPose = cast_transform(base_pose.pose.as_ref()?.transform); // we get viewer poses in eye-level space by default Some(viewer_pose) @@ -122,7 +122,7 @@ impl XRReferenceSpace { // get_viewer_pose(floor_level) = get_pose(floor_level).inverse() * get_pose(viewer_space) // = floor_to_native.inverse() * viewer_pose // = native_to_floor * viewer_pose - let viewer_pose = base_pose.transform?; + let viewer_pose = base_pose.pose.as_ref()?.transform; let native_to_floor = self .upcast::() .session() @@ -171,7 +171,9 @@ impl XRReferenceSpace { .with_session(|s| s.floor_transform())?; Some(cast_transform(native_to_floor.inverse())) }, - XRReferenceSpaceType::Viewer => base_pose.transform.map(cast_transform), + XRReferenceSpaceType::Viewer => { + Some(cast_transform(base_pose.pose.as_ref()?.transform)) + }, _ => unimplemented!(), } } diff --git a/components/script/dom/xrviewerpose.rs b/components/script/dom/xrviewerpose.rs index b55129b8daf0..10c212c5ada4 100644 --- a/components/script/dom/xrviewerpose.rs +++ b/components/script/dom/xrviewerpose.rs @@ -17,7 +17,7 @@ use dom_struct::dom_struct; use js::conversions::ToJSValConvertible; use js::jsapi::Heap; use js::jsval::{JSVal, UndefinedValue}; -use webxr_api::Views; +use webxr_api::{ViewerPose, Views}; #[dom_struct] pub struct XRViewerPose { @@ -39,11 +39,11 @@ impl XRViewerPose { global: &GlobalScope, session: &XRSession, pose: ApiViewerPose, - frame_views: &Views, + viewer_pose: &ViewerPose, ) -> DomRoot { let _ac = enter_realm(&*global); rooted_vec!(let mut views); - match frame_views { + match &viewer_pose.views { Views::Inline => views.push(XRView::new( global, session,