diff options
Diffstat (limited to 'components/script/dom/xrsession.rs')
-rw-r--r-- | components/script/dom/xrsession.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/components/script/dom/xrsession.rs b/components/script/dom/xrsession.rs index b4e6f7c728e..52ed2e3526f 100644 --- a/components/script/dom/xrsession.rs +++ b/components/script/dom/xrsession.rs @@ -4,6 +4,7 @@ use crate::dom::bindings::codegen::Bindings::VRDisplayBinding::VRDisplayMethods; use crate::dom::bindings::codegen::Bindings::XRBinding::XRSessionMode; +use crate::dom::bindings::codegen::Bindings::XRRenderStateBinding::XRRenderStateInit; use crate::dom::bindings::codegen::Bindings::XRSessionBinding; use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XREnvironmentBlendMode; use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XRFrameRequestCallback; @@ -23,7 +24,6 @@ use crate::dom::vrdisplay::VRDisplay; 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; @@ -58,6 +58,10 @@ impl XRSession { pub fn xr_present(&self, p: Rc<Promise>) { self.display.xr_present(self, None, Some(p)); } + + pub fn set_layer(&self, layer: &XRLayer) { + self.base_layer.set(Some(layer)) + } } impl XRSessionMethods for XRSession { @@ -69,8 +73,19 @@ impl XRSessionMethods for XRSession { // https://immersive-web.github.io/webxr/#dom-xrsession-renderstate fn RenderState(&self) -> DomRoot<XRRenderState> { // XXXManishearth maybe cache this - XRRenderState::new(&self.global(), *self.display.DepthNear(), *self.display.DepthFar(), - self.base_layer.get().as_ref().map(|l| &**l)) + 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 + fn UpdateRenderState(&self, init: &XRRenderStateInit) -> Rc<Promise> { + let p = Promise::new(&self.global()); + self.display.queue_renderstate(init, p.clone()); + p } /// https://immersive-web.github.io/webxr/#dom-xrsession-requestanimationframe |