aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglrenderingcontext.rs
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2016-10-09 14:14:26 -0700
committerEric Anholt <eric@anholt.net>2016-10-24 20:42:17 -0700
commit5fda437e886834f715e692272239f273a216c16e (patch)
treee6a74ffc64ba6d58d7fda1935d146f77af254afa /components/script/dom/webglrenderingcontext.rs
parent6029c927eef7332a0b0ee9a7c8c7b6c9065e23b2 (diff)
downloadservo-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.rs14
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);
}
}