mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
Add XRFrame.getPose()
This commit is contained in:
parent
3d790278f1
commit
7e4b6512a7
2 changed files with 18 additions and 0 deletions
|
@ -9,5 +9,6 @@ interface XRFrame {
|
||||||
readonly attribute XRSession session;
|
readonly attribute XRSession session;
|
||||||
|
|
||||||
[Throws] XRViewerPose? getViewerPose(XRReferenceSpace referenceSpace);
|
[Throws] XRViewerPose? getViewerPose(XRReferenceSpace referenceSpace);
|
||||||
|
[Throws] XRPose? getPose(XRSpace space, XRSpace relativeTo);
|
||||||
// XRInputPose? getInputPose(XRInputSource inputSource, optional XRReferenceSpace referenceSpace);
|
// XRInputPose? getInputPose(XRInputSource inputSource, optional XRReferenceSpace referenceSpace);
|
||||||
};
|
};
|
||||||
|
|
|
@ -9,8 +9,10 @@ use crate::dom::bindings::inheritance::Castable;
|
||||||
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
|
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
|
||||||
use crate::dom::bindings::root::{Dom, DomRoot};
|
use crate::dom::bindings::root::{Dom, DomRoot};
|
||||||
use crate::dom::globalscope::GlobalScope;
|
use crate::dom::globalscope::GlobalScope;
|
||||||
|
use crate::dom::xrpose::XRPose;
|
||||||
use crate::dom::xrreferencespace::XRReferenceSpace;
|
use crate::dom::xrreferencespace::XRReferenceSpace;
|
||||||
use crate::dom::xrsession::XRSession;
|
use crate::dom::xrsession::XRSession;
|
||||||
|
use crate::dom::xrspace::XRSpace;
|
||||||
use crate::dom::xrviewerpose::XRViewerPose;
|
use crate::dom::xrviewerpose::XRViewerPose;
|
||||||
use dom_struct::dom_struct;
|
use dom_struct::dom_struct;
|
||||||
use webvr_traits::WebVRFrameData;
|
use webvr_traits::WebVRFrameData;
|
||||||
|
@ -67,4 +69,19 @@ impl XRFrameMethods for XRFrame {
|
||||||
&self.data,
|
&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)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue