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

View file

@ -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,
)))
}

View file

@ -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::<XRSpace>()
.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!(),
}
}

View file

@ -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<XRViewerPose> {
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,