diff options
author | Simon Martin <simartin@users.sourceforge.net> | 2015-12-09 00:21:21 +0100 |
---|---|---|
committer | Simon Martin <simartin@users.sourceforge.net> | 2015-12-26 18:56:48 +0100 |
commit | f2fe401d7d104ff2875a3a9fde9ae918ed8572a6 (patch) | |
tree | 6a01680fd22c9d38e250fd779f24d14793ef5de1 /components/script/dom/webglbuffer.rs | |
parent | c6d613f75b0102aebf0680b34519dbe68790ee10 (diff) | |
download | servo-f2fe401d7d104ff2875a3a9fde9ae918ed8572a6.tar.gz servo-f2fe401d7d104ff2875a3a9fde9ae918ed8572a6.zip |
Issue #8738: bufferSubData and texImage2D argument sanity checks.
Diffstat (limited to 'components/script/dom/webglbuffer.rs')
-rw-r--r-- | components/script/dom/webglbuffer.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/components/script/dom/webglbuffer.rs b/components/script/dom/webglbuffer.rs index 3932eb56dc8..cfb9cdc4810 100644 --- a/components/script/dom/webglbuffer.rs +++ b/components/script/dom/webglbuffer.rs @@ -18,6 +18,7 @@ pub struct WebGLBuffer { id: u32, /// The target to which this buffer was bound the first time target: Cell<Option<u32>>, + capacity: Cell<usize>, is_deleted: Cell<bool>, #[ignore_heap_size_of = "Defined in ipc-channel"] renderer: IpcSender<CanvasMsg>, @@ -29,6 +30,7 @@ impl WebGLBuffer { webgl_object: WebGLObject::new_inherited(), id: id, target: Cell::new(None), + capacity: Cell::new(0), is_deleted: Cell::new(false), renderer: renderer, } @@ -68,6 +70,24 @@ impl WebGLBuffer { Ok(()) } + pub fn buffer_data(&self, target: u32, data: &[u8], usage: u32) -> WebGLResult<()> { + if let Some(previous_target) = self.target.get() { + if target != previous_target { + return Err(WebGLError::InvalidOperation); + } + } + self.capacity.set(data.len()); + self.renderer + .send(CanvasMsg::WebGL(CanvasWebGLMsg::BufferData(target, data.to_vec(), usage))) + .unwrap(); + + Ok(()) + } + + pub fn capacity(&self) -> usize { + self.capacity.get() + } + pub fn delete(&self) { if !self.is_deleted.get() { self.is_deleted.set(true); |