From 90e87b97baa7bf9b57d72a562c98af3ed2b52e88 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Mon, 7 Jan 2019 15:24:26 -0800 Subject: [PATCH] Init XR present on XR::RequestSession() with empty context --- components/script/dom/vrdisplay.rs | 6 +++--- components/script/dom/xr.rs | 5 ++--- components/script/dom/xrsession.rs | 8 +++++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/components/script/dom/vrdisplay.rs b/components/script/dom/vrdisplay.rs index 896bd0d4f814..2115f7ef2186 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 dae63a4baca0..a608d7e31a49 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 449d4acf8fc3..73814a386b28 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 { - 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::().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