diff options
author | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2015-11-01 13:29:46 +0100 |
---|---|---|
committer | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2015-11-01 13:39:20 +0100 |
commit | 95a0d0584ff9e628da01d497cef8184822188d1e (patch) | |
tree | cfc25802aa892ee91a1b681d8d513887b5a619e7 /components/script/dom/webglprogram.rs | |
parent | 601169c0e5b0207805bb316b21e556f5ab67df9b (diff) | |
download | servo-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/webglprogram.rs')
-rw-r--r-- | components/script/dom/webglprogram.rs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/components/script/dom/webglprogram.rs b/components/script/dom/webglprogram.rs index 997f48c96b4..5e51172cb68 100644 --- a/components/script/dom/webglprogram.rs +++ b/components/script/dom/webglprogram.rs @@ -58,7 +58,7 @@ impl WebGLProgram { pub fn delete(&self) { if !self.is_deleted.get() { self.is_deleted.set(true); - self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::DeleteProgram(self.id))).unwrap(); + let _ = self.renderer.send(CanvasMsg::WebGL(CanvasWebGLMsg::DeleteProgram(self.id))); } } @@ -125,3 +125,9 @@ impl WebGLProgram { Ok(receiver.recv().unwrap()) } } + +impl Drop for WebGLProgram { + fn drop(&mut self) { + self.delete(); + } +} |