mirror of
https://github.com/servo/servo.git
synced 2025-08-04 05:00:08 +01:00
Improve getViewerPose()
This commit is contained in:
parent
a2c4270f55
commit
22e5ce5ff3
3 changed files with 14 additions and 9 deletions
|
@ -8,6 +8,6 @@
|
||||||
interface XRFrame {
|
interface XRFrame {
|
||||||
readonly attribute XRSession session;
|
readonly attribute XRSession session;
|
||||||
|
|
||||||
XRViewerPose? getViewerPose(optional XRReferenceSpace referenceSpace);
|
XRViewerPose? getViewerPose(XRReferenceSpace referenceSpace);
|
||||||
// XRInputPose? getInputPose(XRInputSource inputSource, optional XRReferenceSpace referenceSpace);
|
// XRInputPose? getInputPose(XRInputSource inputSource, optional XRReferenceSpace referenceSpace);
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,11 +5,13 @@
|
||||||
use crate::dom::bindings::codegen::Bindings::XRFrameBinding;
|
use crate::dom::bindings::codegen::Bindings::XRFrameBinding;
|
||||||
use crate::dom::bindings::codegen::Bindings::XRFrameBinding::XRFrameMethods;
|
use crate::dom::bindings::codegen::Bindings::XRFrameBinding::XRFrameMethods;
|
||||||
use crate::dom::bindings::codegen::Bindings::XRViewBinding::XREye;
|
use crate::dom::bindings::codegen::Bindings::XRViewBinding::XREye;
|
||||||
|
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::xrreferencespace::XRReferenceSpace;
|
use crate::dom::xrreferencespace::XRReferenceSpace;
|
||||||
use crate::dom::xrsession::XRSession;
|
use crate::dom::xrsession::XRSession;
|
||||||
|
use crate::dom::xrstationaryreferencespace::XRStationaryReferenceSpace;
|
||||||
use crate::dom::xrview::XRView;
|
use crate::dom::xrview::XRView;
|
||||||
use crate::dom::xrviewerpose::XRViewerPose;
|
use crate::dom::xrviewerpose::XRViewerPose;
|
||||||
use dom_struct::dom_struct;
|
use dom_struct::dom_struct;
|
||||||
|
@ -52,17 +54,17 @@ impl XRFrameMethods for XRFrame {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// https://immersive-web.github.io/webxr/#dom-xrframe-getviewerpose
|
/// https://immersive-web.github.io/webxr/#dom-xrframe-getviewerpose
|
||||||
fn GetViewerPose(&self, reference: Option<&XRReferenceSpace>) -> Option<DomRoot<XRViewerPose>> {
|
fn GetViewerPose(&self, reference: &XRReferenceSpace) -> Option<DomRoot<XRViewerPose>> {
|
||||||
// We assume the reference space is eye level for now
|
if let Some(_) = reference.downcast::<XRStationaryReferenceSpace>() {
|
||||||
// since it's the only one 3DOF devices support
|
// For 3DOF devices all three kinds of reference spaces are identical
|
||||||
if reference.is_some() {
|
// FIXME(#23070, Manishearth) support originOffset
|
||||||
// it's not possible to obtain a reference
|
|
||||||
// space at all yet
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
let left = XRView::new(&self.global(), &self.session, XREye::Left, &self.data);
|
let left = XRView::new(&self.global(), &self.session, XREye::Left, &self.data);
|
||||||
let right = XRView::new(&self.global(), &self.session, XREye::Right, &self.data);
|
let right = XRView::new(&self.global(), &self.session, XREye::Right, &self.data);
|
||||||
Some(XRViewerPose::new(&self.global(), &left, &right))
|
Some(XRViewerPose::new(&self.global(), &left, &right))
|
||||||
|
} else {
|
||||||
|
// FIXME(#23070, Manishearth) support identity reference spaces
|
||||||
|
// depends on https://github.com/immersive-web/webxr/issues/565
|
||||||
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,6 +124,9 @@ impl XRSessionMethods for XRSession {
|
||||||
|
|
||||||
// https://immersive-web.github.io/webxr/#create-a-reference-space
|
// https://immersive-web.github.io/webxr/#create-a-reference-space
|
||||||
|
|
||||||
|
// XXXManishearth reject based on session type
|
||||||
|
// https://github.com/immersive-web/webxr/blob/master/spatial-tracking-explainer.md#practical-usage-guidelines
|
||||||
|
|
||||||
match options.type_ {
|
match options.type_ {
|
||||||
XRReferenceSpaceType::Identity => {
|
XRReferenceSpaceType::Identity => {
|
||||||
p.resolve_native(&XRReferenceSpace::identity(
|
p.resolve_native(&XRReferenceSpace::identity(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue