aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/vrdisplay.rs6
-rw-r--r--components/script/dom/xr.rs5
-rw-r--r--components/script/dom/xrsession.rs8
3 files changed, 10 insertions, 9 deletions
diff --git a/components/script/dom/vrdisplay.rs b/components/script/dom/vrdisplay.rs
index 896bd0d4f81..2115f7ef218 100644
--- a/components/script/dom/vrdisplay.rs
+++ b/components/script/dom/vrdisplay.rs
@@ -688,12 +688,12 @@ impl VRDisplay {
// XR stuff
// XXXManishearth eventually we should share as much logic as possible
impl VRDisplay {
- pub fn xr_present(&self, session: &XRSession, ctx: &WebGLRenderingContext) {
+ pub fn xr_present(&self, session: &XRSession, ctx: Option<&WebGLRenderingContext>) {
let layer_bounds = WebVRLayer::default();
self.xr_session.set(Some(session));
if self.presenting.get() {
*self.layer.borrow_mut() = layer_bounds;
- self.layer_ctx.set(Some(&ctx));
+ self.layer_ctx.set(ctx);
return;
}
@@ -709,7 +709,7 @@ impl VRDisplay {
if let Ok(()) = receiver.recv().unwrap() {
*self.layer.borrow_mut() = layer_bounds;
- self.layer_ctx.set(Some(&ctx));
+ self.layer_ctx.set(ctx);
self.init_present();
}
}
diff --git a/components/script/dom/xr.rs b/components/script/dom/xr.rs
index dae63a4baca..a608d7e31a4 100644
--- a/components/script/dom/xr.rs
+++ b/components/script/dom/xr.rs
@@ -95,10 +95,9 @@ impl XRMethods for XR {
}
let session = XRSession::new(&self.global(), &displays[0]);
+ // XXXManishearth we should actually xr_present() here instead of
+ // in XRSession::new, and resolve a promise based on it
promise.resolve_native(&session);
- // whether or not we should initiate presentation is unclear
- // https://github.com/immersive-web/webxr/issues/453
-
promise
}
}
diff --git a/components/script/dom/xrsession.rs b/components/script/dom/xrsession.rs
index 449d4acf8fc..73814a386b2 100644
--- a/components/script/dom/xrsession.rs
+++ b/components/script/dom/xrsession.rs
@@ -37,11 +37,13 @@ impl XRSession {
}
pub fn new(global: &GlobalScope, display: &VRDisplay) -> DomRoot<XRSession> {
- reflect_dom_object(
+ let ret = reflect_dom_object(
Box::new(XRSession::new_inherited(display)),
global,
XRSessionBinding::Wrap,
- )
+ );
+ ret.display.xr_present(&ret, None);
+ ret
}
}
@@ -76,7 +78,7 @@ impl XRSessionMethods for XRSession {
self.base_layer.set(layer);
if let Some(layer) = layer {
let layer = layer.downcast::<XRWebGLLayer>().unwrap();
- self.display.xr_present(&self, &layer.Context());
+ self.display.xr_present(&self, Some(&layer.Context()));
} else {
// steps unknown
// https://github.com/immersive-web/webxr/issues/453