From 8a5b0b897212b82b5d38d565355f2fdacd1bbe88 Mon Sep 17 00:00:00 2001 From: Daniel Date: Sat, 7 May 2016 12:06:17 -0400 Subject: Implement IsShader fn and IsTexture fn for WebGLRenderingContext --- components/script/dom/webglshader.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'components/script/dom/webglshader.rs') 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>, info_log: DOMRefCell>, is_deleted: Cell, + attached_counter: Cell, compilation_status: Cell, #[ignore_heap_size_of = "Defined in ipc-channel"] renderer: IpcSender, @@ -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 { 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(); } } -- cgit v1.2.3