mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +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);
|
return self.webgl_error(InvalidEnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(renderbuffer) = renderbuffer {
|
match renderbuffer {
|
||||||
renderbuffer.bind(target)
|
// Implementations differ on what to do in the deleted
|
||||||
} else {
|
// case: Chromium currently unbinds, and Gecko silently
|
||||||
// Unbind the currently bound renderbuffer
|
// returns. The conformance tests don't cover this case.
|
||||||
self.ipc_renderer
|
Some(renderbuffer) if !renderbuffer.is_deleted() => {
|
||||||
.send(CanvasMsg::WebGL(WebGLCommand::BindRenderbuffer(target, None)))
|
renderbuffer.bind(target)
|
||||||
.unwrap()
|
}
|
||||||
|
_ => {
|
||||||
|
// 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