aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xrspace.rs
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2019-04-04 17:40:18 -0700
committerManish Goregaokar <manishsmail@gmail.com>2019-04-04 17:45:09 -0700
commit813613628db87f09014330a9c508b079454198e6 (patch)
treec4e3d61e6649e0684854a11403fd2a6c3a902d25 /components/script/dom/xrspace.rs
parent7e4b6512a7c0899b642e5eedf0f250630f7d9d34 (diff)
downloadservo-813613628db87f09014330a9c508b079454198e6.tar.gz
servo-813613628db87f09014330a9c508b079454198e6.zip
Add XRSession.viewerSpace
Diffstat (limited to 'components/script/dom/xrspace.rs')
-rw-r--r--components/script/dom/xrspace.rs17
1 files changed, 14 insertions, 3 deletions
diff --git a/components/script/dom/xrspace.rs b/components/script/dom/xrspace.rs
index d9bbad8cd86..8948ac03c8e 100644
--- a/components/script/dom/xrspace.rs
+++ b/components/script/dom/xrspace.rs
@@ -18,6 +18,7 @@ use webvr_traits::WebVRFrameData;
pub struct XRSpace {
eventtarget: EventTarget,
session: Dom<XRSession>,
+ is_viewerspace: bool,
}
impl XRSpace {
@@ -25,13 +26,21 @@ impl XRSpace {
XRSpace {
eventtarget: EventTarget::new_inherited(),
session: Dom::from_ref(session),
+ is_viewerspace: false,
}
}
- #[allow(unused)]
- pub fn new(global: &GlobalScope, session: &XRSession) -> DomRoot<XRSpace> {
+ fn new_viewerspace_inner(session: &XRSession) -> XRSpace {
+ XRSpace {
+ eventtarget: EventTarget::new_inherited(),
+ session: Dom::from_ref(session),
+ is_viewerspace: true,
+ }
+ }
+
+ pub fn new_viewerspace(global: &GlobalScope, session: &XRSession) -> DomRoot<XRSpace> {
reflect_dom_object(
- Box::new(XRSpace::new_inherited(session)),
+ Box::new(XRSpace::new_viewerspace_inner(session)),
global,
XRSpaceBinding::Wrap,
)
@@ -47,6 +56,8 @@ impl XRSpace {
pub fn get_pose(&self, base_pose: &WebVRFrameData) -> RigidTransform3D<f64> {
if let Some(reference) = self.downcast::<XRReferenceSpace>() {
reference.get_pose(base_pose)
+ } else if self.is_viewerspace {
+ XRSpace::viewer_pose_from_frame_data(base_pose)
} else {
unreachable!()
}