diff options
Diffstat (limited to 'components/script/dom/webglrenderbuffer.rs')
-rw-r--r-- | components/script/dom/webglrenderbuffer.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/components/script/dom/webglrenderbuffer.rs b/components/script/dom/webglrenderbuffer.rs index fa7d7324f94..96ef3bb0d67 100644 --- a/components/script/dom/webglrenderbuffer.rs +++ b/components/script/dom/webglrenderbuffer.rs @@ -23,6 +23,7 @@ pub struct WebGLRenderbuffer { is_deleted: Cell<bool>, size: Cell<Option<(i32, i32)>>, internal_format: Cell<Option<u32>>, + is_initialized: Cell<bool>, } impl WebGLRenderbuffer { @@ -34,6 +35,7 @@ impl WebGLRenderbuffer { is_deleted: Cell::new(false), internal_format: Cell::new(None), size: Cell::new(None), + is_initialized: Cell::new(false), } } @@ -66,6 +68,14 @@ impl WebGLRenderbuffer { self.internal_format.get().unwrap_or(constants::RGBA4) } + pub fn mark_initialized(&self) { + self.is_initialized.set(true); + } + + pub fn is_initialized(&self) -> bool { + self.is_initialized.get() + } + pub fn bind(&self, target: u32) { self.ever_bound.set(true); self.upcast::<WebGLObject>() @@ -76,6 +86,22 @@ impl WebGLRenderbuffer { pub fn delete(&self) { if !self.is_deleted.get() { self.is_deleted.set(true); + + /* + 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 { + fb.detach_renderbuffer(self); + } + self.upcast::<WebGLObject>() .context() .send_command(WebGLCommand::DeleteRenderbuffer(self.id)); |