Update to use webxr_api::ViewerPose

This commit is contained in:
Manish Goregaokar 2020-05-14 12:00:02 -07:00
parent 794624b42b
commit a97dcd9ad6
4 changed files with 16 additions and 9 deletions

4
Cargo.lock generated
View file

@ -6471,7 +6471,7 @@ dependencies = [
[[package]] [[package]]
name = "webxr" name = "webxr"
version = "0.0.1" version = "0.0.1"
source = "git+https://github.com/servo/webxr#a73b150f1e1a946fd90bd1ccf0056e35c3eef0d2" source = "git+https://github.com/servo/webxr#3f754a11eb3e9771f6020ec5a25ae94ed1e11f07"
dependencies = [ dependencies = [
"android_injected_glue", "android_injected_glue",
"bindgen", "bindgen",
@ -6494,7 +6494,7 @@ dependencies = [
[[package]] [[package]]
name = "webxr-api" name = "webxr-api"
version = "0.0.1" version = "0.0.1"
source = "git+https://github.com/servo/webxr#a73b150f1e1a946fd90bd1ccf0056e35c3eef0d2" source = "git+https://github.com/servo/webxr#3f754a11eb3e9771f6020ec5a25ae94ed1e11f07"
dependencies = [ dependencies = [
"euclid", "euclid",
"ipc-channel", "ipc-channel",

View file

@ -85,11 +85,16 @@ impl XRFrameMethods for XRFrame {
} else { } else {
return Ok(None); return Ok(None);
}; };
let viewer_pose = if let Some(pose) = self.data.pose.as_ref() {
pose
} else {
return Ok(None);
};
Ok(Some(XRViewerPose::new( Ok(Some(XRViewerPose::new(
&self.global(), &self.global(),
&self.session, &self.session,
pose, pose,
&self.data.views, viewer_pose,
))) )))
} }

View file

@ -113,7 +113,7 @@ impl XRReferenceSpace {
// get_viewer_pose(eye_level) = get_pose(eye_level).inverse() * get_pose(viewer_space) // get_viewer_pose(eye_level) = get_pose(eye_level).inverse() * get_pose(viewer_space)
// = I * viewer_pose // = I * viewer_pose
// = 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 // we get viewer poses in eye-level space by default
Some(viewer_pose) Some(viewer_pose)
@ -122,7 +122,7 @@ impl XRReferenceSpace {
// get_viewer_pose(floor_level) = get_pose(floor_level).inverse() * get_pose(viewer_space) // get_viewer_pose(floor_level) = get_pose(floor_level).inverse() * get_pose(viewer_space)
// = floor_to_native.inverse() * viewer_pose // = floor_to_native.inverse() * viewer_pose
// = native_to_floor * 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 let native_to_floor = self
.upcast::<XRSpace>() .upcast::<XRSpace>()
.session() .session()
@ -171,7 +171,9 @@ impl XRReferenceSpace {
.with_session(|s| s.floor_transform())?; .with_session(|s| s.floor_transform())?;
Some(cast_transform(native_to_floor.inverse())) 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!(), _ => unimplemented!(),
} }
} }

View file

@ -17,7 +17,7 @@ use dom_struct::dom_struct;
use js::conversions::ToJSValConvertible; use js::conversions::ToJSValConvertible;
use js::jsapi::Heap; use js::jsapi::Heap;
use js::jsval::{JSVal, UndefinedValue}; use js::jsval::{JSVal, UndefinedValue};
use webxr_api::Views; use webxr_api::{ViewerPose, Views};
#[dom_struct] #[dom_struct]
pub struct XRViewerPose { pub struct XRViewerPose {
@ -39,11 +39,11 @@ impl XRViewerPose {
global: &GlobalScope, global: &GlobalScope,
session: &XRSession, session: &XRSession,
pose: ApiViewerPose, pose: ApiViewerPose,
frame_views: &Views, viewer_pose: &ViewerPose,
) -> DomRoot<XRViewerPose> { ) -> DomRoot<XRViewerPose> {
let _ac = enter_realm(&*global); let _ac = enter_realm(&*global);
rooted_vec!(let mut views); rooted_vec!(let mut views);
match frame_views { match &viewer_pose.views {
Views::Inline => views.push(XRView::new( Views::Inline => views.push(XRView::new(
global, global,
session, session,