From b908b027a941f3ee459a3f0b50185eea505f47b4 Mon Sep 17 00:00:00 2001 From: Mike Welsh Date: Tue, 22 Sep 2020 22:10:21 -0700 Subject: [PATCH] webgl: Handle errors in renderbuffer creation --- render/webgl/src/lib.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/render/webgl/src/lib.rs b/render/webgl/src/lib.rs index a9df53eea..f7f4c235c 100644 --- a/render/webgl/src/lib.rs +++ b/render/webgl/src/lib.rs @@ -349,6 +349,7 @@ impl WebGlRenderBackend { self.viewport_width as i32, self.viewport_height as i32, ); + gl.check_error("renderbuffer_storage_multisample (color)")?; let stencil_renderbuffer = gl .create_renderbuffer() @@ -361,6 +362,7 @@ impl WebGlRenderBackend { self.viewport_width as i32, self.viewport_height as i32, ); + gl.check_error("renderbuffer_storage_multisample (stencil)")?; gl.bind_framebuffer(Gl2::FRAMEBUFFER, Some(&render_framebuffer)); gl.framebuffer_renderbuffer( @@ -1419,3 +1421,27 @@ impl ShaderProgram { } impl WebGlRenderBackend {} + +trait GlExt { + fn check_error(&self, error_msg: &'static str) -> Result<(), Error>; +} + +impl GlExt for Gl { + /// Check if GL returned an error for the previous operation. + fn check_error(&self, error_msg: &'static str) -> Result<(), Error> { + match self.get_error() { + Self::NO_ERROR => Ok(()), + error => Err(format!("WebGL: Error in {}: {}", error_msg, error).into()), + } + } +} + +impl GlExt for Gl2 { + /// Check if GL returned an error for the previous operation. + fn check_error(&self, error_msg: &'static str) -> Result<(), Error> { + match self.get_error() { + Self::NO_ERROR => Ok(()), + error => Err(format!("WebGL: Error in {}: {}", error_msg, error).into()), + } + } +}