aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglrenderbuffer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/webglrenderbuffer.rs')
-rw-r--r--components/script/dom/webglrenderbuffer.rs26
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));