diff options
author | Daniel <ddefisher@gmail.com> | 2016-05-07 12:06:17 -0400 |
---|---|---|
committer | Daniel <ddefisher@gmail.com> | 2016-05-09 20:54:57 -0400 |
commit | 8a5b0b897212b82b5d38d565355f2fdacd1bbe88 (patch) | |
tree | aef54eab9a6037c41c9cf4ccbe7a627de49a2c21 /components/script/dom/webglshader.rs | |
parent | a09b2374f9d0a54b5ca02ee7b219cd30b5841eb4 (diff) | |
download | servo-8a5b0b897212b82b5d38d565355f2fdacd1bbe88.tar.gz servo-8a5b0b897212b82b5d38d565355f2fdacd1bbe88.zip |
Implement IsShader fn and IsTexture fn for WebGLRenderingContext
Diffstat (limited to 'components/script/dom/webglshader.rs')
-rw-r--r-- | components/script/dom/webglshader.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/components/script/dom/webglshader.rs b/components/script/dom/webglshader.rs index eb930a69f13..c166fbcf46d 100644 --- a/components/script/dom/webglshader.rs +++ b/components/script/dom/webglshader.rs @@ -32,6 +32,7 @@ pub struct WebGLShader { source: DOMRefCell<Option<DOMString>>, info_log: DOMRefCell<Option<String>>, is_deleted: Cell<bool>, + attached_counter: Cell<u32>, compilation_status: Cell<ShaderCompilationStatus>, #[ignore_heap_size_of = "Defined in ipc-channel"] renderer: IpcSender<CanvasMsg>, @@ -55,6 +56,7 @@ impl WebGLShader { source: DOMRefCell::new(None), info_log: DOMRefCell::new(None), is_deleted: Cell::new(false), + attached_counter: Cell::new(0), compilation_status: Cell::new(ShaderCompilationStatus::NotCompiled), renderer: renderer, } @@ -126,6 +128,7 @@ impl WebGLShader { /// Mark this shader as deleted (if it wasn't previously) /// and delete it as if calling glDeleteShader. + /// Currently does not check if shader is attached pub fn delete(&self) { if !self.is_deleted.get() { self.is_deleted.set(true); @@ -133,6 +136,23 @@ impl WebGLShader { } } + pub fn is_deleted(&self) -> bool { + self.is_deleted.get() + } + + pub fn is_attached(&self) -> bool { + self.attached_counter.get() > 0 + } + + pub fn increment_attached_counter(&self) { + self.attached_counter.set(self.attached_counter.get() + 1); + } + + pub fn decrement_attached_counter(&self) { + assert!(self.attached_counter.get() > 0); + self.attached_counter.set(self.attached_counter.get() - 1); + } + /// glGetShaderInfoLog pub fn info_log(&self) -> Option<String> { self.info_log.borrow().clone() @@ -162,6 +182,7 @@ impl WebGLShader { impl Drop for WebGLShader { fn drop(&mut self) { + assert!(self.attached_counter.get() == 0); self.delete(); } } |