mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
webgl: Protect against GL error on glBindRenderbuffer(deleted rbo).
On a GLES or compatibility underlying GL context, we were fine because an underlying renderbuffer object would just get re-created, and nothing too bad happened because we aren't tracking the currently bound renderbuffer at the DOM level. However, on a desktop GL core context, binding non-genned or deleted names is an error. Fixes a crash in object-deletion-behavior.html.
This commit is contained in:
parent
545ae86dff
commit
6ec2c41df8
1 changed files with 13 additions and 7 deletions
|
@ -705,13 +705,19 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
|||
return self.webgl_error(InvalidEnum);
|
||||
}
|
||||
|
||||
if let Some(renderbuffer) = renderbuffer {
|
||||
renderbuffer.bind(target)
|
||||
} else {
|
||||
// Unbind the currently bound renderbuffer
|
||||
self.ipc_renderer
|
||||
.send(CanvasMsg::WebGL(WebGLCommand::BindRenderbuffer(target, None)))
|
||||
.unwrap()
|
||||
match renderbuffer {
|
||||
// Implementations differ on what to do in the deleted
|
||||
// case: Chromium currently unbinds, and Gecko silently
|
||||
// returns. The conformance tests don't cover this case.
|
||||
Some(renderbuffer) if !renderbuffer.is_deleted() => {
|
||||
renderbuffer.bind(target)
|
||||
}
|
||||
_ => {
|
||||
// Unbind the currently bound renderbuffer
|
||||
self.ipc_renderer
|
||||
.send(CanvasMsg::WebGL(WebGLCommand::BindRenderbuffer(target, None)))
|
||||
.unwrap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue