aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglshader.rs
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <ecoal95@gmail.com>2015-11-01 13:29:46 +0100
committerEmilio Cobos Álvarez <ecoal95@gmail.com>2015-11-01 13:39:20 +0100
commit95a0d0584ff9e628da01d497cef8184822188d1e (patch)
treecfc25802aa892ee91a1b681d8d513887b5a619e7 /components/script/dom/webglshader.rs
parent601169c0e5b0207805bb316b21e556f5ab67df9b (diff)
downloadservo-95a0d0584ff9e628da01d497cef8184822188d1e.tar.gz
servo-95a0d0584ff9e628da01d497cef8184822188d1e.zip
webgl: Add destructors for texture, program, shader, buffer and framebuffer
This allows to cleanup resources earlier if they stop being used. Right now all resources were cleaned up when the context was destroyed, this is a slightly better approach. We ignore the possible failure of the send() call, since we don't keep track of these resources from the `WebGLRenderingContext` structure, so a texture could be destroyed after the context and give us problems.
Diffstat (limited to 'components/script/dom/webglshader.rs')
-rw-r--r--components/script/dom/webglshader.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/components/script/dom/webglshader.rs b/components/script/dom/webglshader.rs
index e33b27d3839..65dc958033f 100644
--- a/components/script/dom/webglshader.rs
+++ b/components/script/dom/webglshader.rs
@@ -121,7 +121,7 @@ impl WebGLShader {
pub fn delete(&self) {
if !self.is_deleted.get() {
self.is_deleted.set(true);
- self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::DeleteShader(self.id))).unwrap()
+ let _ = self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::DeleteShader(self.id)));
}
}
@@ -152,3 +152,9 @@ impl WebGLShader {
*self.source.borrow_mut() = Some(source);
}
}
+
+impl Drop for WebGLShader {
+ fn drop(&mut self) {
+ self.delete();
+ }
+}