diff options
author | Eric Anholt <eric@anholt.net> | 2016-10-09 14:14:26 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2016-10-24 20:42:17 -0700 |
commit | 5fda437e886834f715e692272239f273a216c16e (patch) | |
tree | e6a74ffc64ba6d58d7fda1935d146f77af254afa /components/script/dom/webglrenderingcontext.rs | |
parent | 6029c927eef7332a0b0ee9a7c8c7b6c9065e23b2 (diff) | |
download | servo-5fda437e886834f715e692272239f273a216c16e.tar.gz servo-5fda437e886834f715e692272239f273a216c16e.zip |
webgl: Throw an error when binding a deleted framebuffer.
The spec was recently changed to clarify that this should throw an
error.
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 14 |
1 files changed, 12 insertions, 2 deletions
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); } } |