aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xrframe.rs
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2019-04-04 16:21:15 -0700
committerManish Goregaokar <manishsmail@gmail.com>2019-04-04 17:22:08 -0700
commit7e4b6512a7c0899b642e5eedf0f250630f7d9d34 (patch)
tree32507bb5d5da66cd3a5fbabc1bdb43eaef4eb34e /components/script/dom/xrframe.rs
parent3d790278f1033c1fbefd3d227ff3da7d842fb24d (diff)
downloadservo-7e4b6512a7c0899b642e5eedf0f250630f7d9d34.tar.gz
servo-7e4b6512a7c0899b642e5eedf0f250630f7d9d34.zip
Add XRFrame.getPose()
Diffstat (limited to 'components/script/dom/xrframe.rs')
-rw-r--r--components/script/dom/xrframe.rs17
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)))
+ }
}