From 99b6091b7a2d0782e60cef881cd2a48e44df4654 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 2 Oct 2018 11:20:05 +0200 Subject: [PATCH] Clean up create_webgl_context --- components/canvas/webgl_thread.rs | 76 +++++++++++++++---------------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/components/canvas/webgl_thread.rs b/components/canvas/webgl_thread.rs index 4d8a4c044a2..74f25b7768b 100644 --- a/components/canvas/webgl_thread.rs +++ b/components/canvas/webgl_thread.rs @@ -216,50 +216,48 @@ impl WebGLThread { } /// Creates a new WebGLContext - fn create_webgl_context(&mut self, - version: WebGLVersion, - size: Size2D, - attributes: GLContextAttributes) - -> Result<(WebGLContextId, GLLimits, WebGLContextShareMode), String> { - // First try to create a shared context for the best performance. - // Fallback to readback mode if the shared context creation fails. - let result = self.gl_factory.new_shared_context(version, size, attributes) - .map(|r| (r, WebGLContextShareMode::SharedTexture)) - .or_else(|err| { - warn!("Couldn't create shared GL context ({}), using slow \ - readback context instead.", err); - let ctx = self.gl_factory.new_context(version, size, attributes); - ctx.map(|r| (r, WebGLContextShareMode::Readback)) - }); - + fn create_webgl_context( + &mut self, + version: WebGLVersion, + size: Size2D, + attributes: GLContextAttributes, + ) -> Result<(WebGLContextId, GLLimits, WebGLContextShareMode), String> { // Creating a new GLContext may make the current bound context_id dirty. // Clear it to ensure that make_current() is called in subsequent commands. self.bound_context_id = None; - match result { - Ok((ctx, share_mode)) => { - let id = WebGLContextId(self.next_webgl_id); - let (size, texture_id, limits) = ctx.get_info(); - self.next_webgl_id += 1; - self.contexts.insert(id, GLContextData { - ctx, - state: Default::default(), - }); - self.cached_context_info.insert(id, WebGLContextInfo { - texture_id, - size, - alpha: attributes.alpha, - image_key: None, - share_mode, - gl_sync: None, - }); + // First try to create a shared context for the best performance. + // Fallback to readback mode if the shared context creation fails. + let (ctx, share_mode) = self.gl_factory + .new_shared_context(version, size, attributes) + .map(|r| (r, WebGLContextShareMode::SharedTexture)) + .or_else(|err| { + warn!( + "Couldn't create shared GL context ({}), using slow readback context instead.", + err + ); + let ctx = self.gl_factory.new_context(version, size, attributes)?; + Ok((ctx, WebGLContextShareMode::Readback)) + }) + .map_err(|msg| msg.to_owned())?; - Ok((id, limits, share_mode)) - }, - Err(msg) => { - Err(msg.to_owned()) - } - } + let id = WebGLContextId(self.next_webgl_id); + let (size, texture_id, limits) = ctx.get_info(); + self.next_webgl_id += 1; + self.contexts.insert(id, GLContextData { + ctx, + state: Default::default(), + }); + self.cached_context_info.insert(id, WebGLContextInfo { + texture_id, + size, + alpha: attributes.alpha, + image_key: None, + share_mode, + gl_sync: None, + }); + + Ok((id, limits, share_mode)) } /// Resizes a WebGLContext