diff options
Diffstat (limited to 'components/script/dom/webglrenderbuffer.rs')
-rw-r--r-- | components/script/dom/webglrenderbuffer.rs | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/components/script/dom/webglrenderbuffer.rs b/components/script/dom/webglrenderbuffer.rs index ca75f83c336..8c8164f6243 100644 --- a/components/script/dom/webglrenderbuffer.rs +++ b/components/script/dom/webglrenderbuffer.rs @@ -96,20 +96,24 @@ impl WebGLRenderbuffer { if !self.is_deleted.get() { self.is_deleted.set(true); + let context = self.upcast::<WebGLObject>().context(); + /* - If a renderbuffer object is deleted while its image is attached to the currently - bound framebuffer, then it is as if FramebufferRenderbuffer had been called, with - a renderbuffer of 0, for each attachment point to which this image was attached - in the currently bound framebuffer. - - GLES 2.0, 4.4.3, "Attaching Renderbuffer Images to a Framebuffer" - */ - let currently_bound_framebuffer = - self.upcast::<WebGLObject>().context().bound_framebuffer(); - if let Some(fb) = currently_bound_framebuffer { + If a renderbuffer object is deleted while its image is attached to one or more + attachment points in a currently bound framebuffer object, then it is as if + FramebufferRenderbuffer had been called, with a renderbuffer of zero, for each + attachment point to which this image was attached in that framebuffer object. + In other words,the renderbuffer image is first detached from all attachment points + in that frame-buffer object. + - GLES 3.0, 4.4.2.3, "Attaching Renderbuffer Images to a Framebuffer" + */ + if let Some(fb) = context.get_draw_framebuffer_slot().get() { + let _ = fb.detach_renderbuffer(self); + } + if let Some(fb) = context.get_read_framebuffer_slot().get() { let _ = fb.detach_renderbuffer(self); } - let context = self.upcast::<WebGLObject>().context(); let cmd = WebGLCommand::DeleteRenderbuffer(self.id); if fallible { context.send_command_ignored(cmd); |