diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2019-04-04 16:21:15 -0700 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2019-04-04 17:22:08 -0700 |
commit | 7e4b6512a7c0899b642e5eedf0f250630f7d9d34 (patch) | |
tree | 32507bb5d5da66cd3a5fbabc1bdb43eaef4eb34e /components/script/dom/xrframe.rs | |
parent | 3d790278f1033c1fbefd3d227ff3da7d842fb24d (diff) | |
download | servo-7e4b6512a7c0899b642e5eedf0f250630f7d9d34.tar.gz servo-7e4b6512a7c0899b642e5eedf0f250630f7d9d34.zip |
Add XRFrame.getPose()
Diffstat (limited to 'components/script/dom/xrframe.rs')
-rw-r--r-- | components/script/dom/xrframe.rs | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/components/script/dom/xrframe.rs b/components/script/dom/xrframe.rs index a3a8c201255..67602709d9b 100644 --- a/components/script/dom/xrframe.rs +++ b/components/script/dom/xrframe.rs @@ -9,8 +9,10 @@ use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector}; use crate::dom::bindings::root::{Dom, DomRoot}; use crate::dom::globalscope::GlobalScope; +use crate::dom::xrpose::XRPose; use crate::dom::xrreferencespace::XRReferenceSpace; use crate::dom::xrsession::XRSession; +use crate::dom::xrspace::XRSpace; use crate::dom::xrviewerpose::XRViewerPose; use dom_struct::dom_struct; use webvr_traits::WebVRFrameData; @@ -67,4 +69,19 @@ impl XRFrameMethods for XRFrame { &self.data, ))) } + + /// https://immersive-web.github.io/webxr/#dom-xrframe-getpose + fn GetPose( + &self, + space: &XRSpace, + relative_to: &XRSpace, + ) -> Result<Option<DomRoot<XRPose>>, Error> { + if self.session != space.session() || self.session != relative_to.session() { + return Err(Error::InvalidState); + } + let space = space.get_pose(&self.data); + let relative_to = relative_to.get_pose(&self.data); + let pose = relative_to.inverse().pre_mul(&space); + Ok(Some(XRPose::new(&self.global(), pose))) + } } |