diff --git a/components/script/dom/webidls/XRRenderState.webidl b/components/script/dom/webidls/XRRenderState.webidl index 99e66dbe113..3cf622cfb9b 100644 --- a/components/script/dom/webidls/XRRenderState.webidl +++ b/components/script/dom/webidls/XRRenderState.webidl @@ -14,4 +14,4 @@ dictionary XRRenderStateInit { readonly attribute double depthNear; readonly attribute double depthFar; readonly attribute XRLayer? baseLayer; -}; \ No newline at end of file +}; diff --git a/components/script/dom/webidls/XRSession.webidl b/components/script/dom/webidls/XRSession.webidl index fa8d13b7cb3..3184a1b7787 100644 --- a/components/script/dom/webidls/XRSession.webidl +++ b/components/script/dom/webidls/XRSession.webidl @@ -19,9 +19,7 @@ interface XRSession : EventTarget { // readonly attribute XRPresentationContext outputContext; readonly attribute XREnvironmentBlendMode environmentBlendMode; - attribute double depthNear; - attribute double depthFar; - attribute XRLayer? baseLayer; + readonly attribute XRRenderState renderState; // // Methods Promise requestReferenceSpace(XRReferenceSpaceOptions options); diff --git a/components/script/dom/xrrenderstate.rs b/components/script/dom/xrrenderstate.rs index 562e4231919..cc0739396e2 100644 --- a/components/script/dom/xrrenderstate.rs +++ b/components/script/dom/xrrenderstate.rs @@ -50,14 +50,17 @@ impl XRRenderState { } impl XRRenderStateMethods for XRRenderState { + /// https://immersive-web.github.io/webxr/#dom-xrrenderstate-depthnear fn DepthNear(&self) -> Finite { Finite::wrap(self.depth_near.get()) } + /// https://immersive-web.github.io/webxr/#dom-xrrenderstate-depthfar fn DepthFar(&self) -> Finite { Finite::wrap(self.depth_far.get()) } + /// https://immersive-web.github.io/webxr/#dom-xrrenderstate-baselayer fn GetBaseLayer(&self) -> Option> { self.layer.get() } diff --git a/components/script/dom/xrsession.rs b/components/script/dom/xrsession.rs index f756b0e5fa5..b4e6f7c728e 100644 --- a/components/script/dom/xrsession.rs +++ b/components/script/dom/xrsession.rs @@ -14,8 +14,7 @@ use crate::dom::bindings::codegen::Bindings::XRWebGLLayerBinding::XRWebGLLayerMe use crate::dom::bindings::error::Error; use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::num::Finite; -use crate::dom::bindings::reflector::reflect_dom_object; -use crate::dom::bindings::reflector::DomObject; +use crate::dom::bindings::reflector::{DomObject, reflect_dom_object}; use crate::dom::bindings::root::{Dom, DomRoot, MutNullableDom}; use crate::dom::eventtarget::EventTarget; use crate::dom::globalscope::GlobalScope; @@ -25,6 +24,7 @@ use crate::dom::xrlayer::XRLayer; use crate::dom::xrreferencespace::XRReferenceSpace; use crate::dom::xrstationaryreferencespace::XRStationaryReferenceSpace; use crate::dom::xrwebgllayer::XRWebGLLayer; +use crate::dom::xrrenderstate::XRRenderState; use dom_struct::dom_struct; use std::rc::Rc; @@ -61,46 +61,16 @@ impl XRSession { } impl XRSessionMethods for XRSession { - /// https://immersive-web.github.io/webxr/#dom-xrsession-depthnear - fn DepthNear(&self) -> Finite { - self.display.DepthNear() - } - - /// https://immersive-web.github.io/webxr/#dom-xrsession-depthfar - fn DepthFar(&self) -> Finite { - self.display.DepthFar() - } - - /// https://immersive-web.github.io/webxr/#dom-xrsession-depthnear - fn SetDepthNear(&self, d: Finite) { - self.display.SetDepthNear(d) - } - - /// https://immersive-web.github.io/webxr/#dom-xrsession-depthfar - fn SetDepthFar(&self, d: Finite) { - self.display.SetDepthFar(d) - } - /// https://immersive-web.github.io/webxr/#dom-xrsession-mode fn Mode(&self) -> XRSessionMode { XRSessionMode::Immersive_vr } - /// https://immersive-web.github.io/webxr/#dom-xrsession-baselayer - fn SetBaseLayer(&self, layer: Option<&XRLayer>) { - self.base_layer.set(layer); - if let Some(layer) = layer { - let layer = layer.downcast::().unwrap(); - self.display.xr_present(&self, Some(&layer.Context()), None); - } else { - // steps unknown - // https://github.com/immersive-web/webxr/issues/453 - } - } - - /// https://immersive-web.github.io/webxr/#dom-xrsession-baselayer - fn GetBaseLayer(&self) -> Option> { - self.base_layer.get() + // https://immersive-web.github.io/webxr/#dom-xrsession-renderstate + fn RenderState(&self) -> DomRoot { + // XXXManishearth maybe cache this + XRRenderState::new(&self.global(), *self.display.DepthNear(), *self.display.DepthFar(), + self.base_layer.get().as_ref().map(|l| &**l)) } /// https://immersive-web.github.io/webxr/#dom-xrsession-requestanimationframe