diff options
Diffstat (limited to 'components/script/dom/webglframebuffer.rs')
-rw-r--r-- | components/script/dom/webglframebuffer.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/components/script/dom/webglframebuffer.rs b/components/script/dom/webglframebuffer.rs index 4dddfb047a0..0211a0bc31f 100644 --- a/components/script/dom/webglframebuffer.rs +++ b/components/script/dom/webglframebuffer.rs @@ -231,6 +231,7 @@ impl WebGLFramebuffer { _ => { *binding.borrow_mut() = None; + self.update_status(); None } }; @@ -245,6 +246,49 @@ impl WebGLFramebuffer { Ok(()) } + pub fn detach_renderbuffer(&self, rb: &WebGLRenderbuffer) { + let attachments = [&self.color, + &self.depth, + &self.stencil, + &self.depthstencil]; + + for attachment in &attachments { + let matched = { + match *attachment.borrow() { + Some(WebGLFramebufferAttachment::Renderbuffer(ref att_rb)) + if rb.id() == att_rb.id() => true, + _ => false, + } + }; + + if matched { + *attachment.borrow_mut() = None; + self.update_status(); + } + } + } + + pub fn detach_texture(&self, texture: &WebGLTexture) { + let attachments = [&self.color, + &self.depth, + &self.stencil, + &self.depthstencil]; + + for attachment in &attachments { + let matched = { + match *attachment.borrow() { + Some(WebGLFramebufferAttachment::Texture(ref att_texture)) + if texture.id() == att_texture.id() => true, + _ => false, + } + }; + + if matched { + *attachment.borrow_mut() = None; + } + } + } + pub fn target(&self) -> Option<u32> { self.target.get() } |