From b6cf6c045081e811f80f4e954e407801d4a35943 Mon Sep 17 00:00:00 2001 From: Alan Jeffrey Date: Wed, 28 Aug 2019 19:19:31 -0500 Subject: [PATCH] Better error detection when creating an XRWebGLLayer --- components/script/dom/xrwebgllayer.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/components/script/dom/xrwebgllayer.rs b/components/script/dom/xrwebgllayer.rs index 713546e1129..e67b5dbf656 100644 --- a/components/script/dom/xrwebgllayer.rs +++ b/components/script/dom/xrwebgllayer.rs @@ -129,12 +129,28 @@ impl XRWebGLLayer { ); // Restore the WebGL state while complaining about global mutable state + let fb_status = context.CheckFramebufferStatus(constants::FRAMEBUFFER); + let gl_status = context.GetError(); context.BindTexture(constants::TEXTURE_2D, old_texture.as_ref().map(|t| &**t)); context.BindFramebuffer(constants::FRAMEBUFFER, old_fbo.as_ref().map(|f| &**f)); // Step 8.4: "If layer’s resources were unable to be created for any reason, // throw an OperationError and abort these steps." - sc.or(Err(Error::Operation))?; + if let Err(err) = sc { + error!("TexImage2D error {:?} while creating XR context", err); + return Err(Error::Operation); + } + if fb_status != constants::FRAMEBUFFER_COMPLETE { + error!( + "Framebuffer error {:x} while creating XR context", + fb_status + ); + return Err(Error::Operation); + } + if gl_status != constants::NO_ERROR { + error!("GL error {:x} while creating XR context", gl_status); + return Err(Error::Operation); + } // Step 9. "Return layer." Ok(XRWebGLLayer::new(