From 5fda437e886834f715e692272239f273a216c16e Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Sun, 9 Oct 2016 14:14:26 -0700 Subject: webgl: Throw an error when binding a deleted framebuffer. The spec was recently changed to clarify that this should throw an error. --- components/script/dom/webglrenderingcontext.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'components/script/dom/webglrenderingcontext.rs') diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index abfa10983b0..2d4e26fd05f 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -804,13 +804,23 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { return self.webgl_error(InvalidOperation); } - self.bound_framebuffer.set(framebuffer); if let Some(framebuffer) = framebuffer { - framebuffer.bind(target) + if framebuffer.is_deleted() { + // From the WebGL spec: + // + // "An attempt to bind a deleted framebuffer will + // generate an INVALID_OPERATION error, and the + // current binding will remain untouched." + return self.webgl_error(InvalidOperation); + } else { + framebuffer.bind(target); + self.bound_framebuffer.set(Some(framebuffer)); + } } else { // Bind the default framebuffer let cmd = WebGLCommand::BindFramebuffer(target, WebGLFramebufferBindingRequest::Default); self.ipc_renderer.send(CanvasMsg::WebGL(cmd)).unwrap(); + self.bound_framebuffer.set(framebuffer); } } -- cgit v1.2.3