aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglshader.rs
diff options
context:
space:
mode:
authorDaniel <ddefisher@gmail.com>2016-05-07 12:06:17 -0400
committerDaniel <ddefisher@gmail.com>2016-05-09 20:54:57 -0400
commit8a5b0b897212b82b5d38d565355f2fdacd1bbe88 (patch)
treeaef54eab9a6037c41c9cf4ccbe7a627de49a2c21 /components/script/dom/webglshader.rs
parenta09b2374f9d0a54b5ca02ee7b219cd30b5841eb4 (diff)
downloadservo-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.rs21
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();
}
}