aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglbuffer.rs
diff options
context:
space:
mode:
authorSimon Martin <simartin@users.sourceforge.net>2015-12-09 00:21:21 +0100
committerSimon Martin <simartin@users.sourceforge.net>2015-12-26 18:56:48 +0100
commitf2fe401d7d104ff2875a3a9fde9ae918ed8572a6 (patch)
tree6a01680fd22c9d38e250fd779f24d14793ef5de1 /components/script/dom/webglbuffer.rs
parentc6d613f75b0102aebf0680b34519dbe68790ee10 (diff)
downloadservo-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.rs20
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);