aboutsummaryrefslogtreecommitdiffstats
path: root/components/canvas
diff options
context:
space:
mode:
Diffstat (limited to 'components/canvas')
-rw-r--r--components/canvas/webgl_thread.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/components/canvas/webgl_thread.rs b/components/canvas/webgl_thread.rs
index 00e38dfc56f..b36df1c1b13 100644
--- a/components/canvas/webgl_thread.rs
+++ b/components/canvas/webgl_thread.rs
@@ -55,6 +55,7 @@ use sparkle::gl::Gl;
use std::borrow::Cow;
use std::cell::{Cell, RefCell};
use std::rc::Rc;
+use std::slice;
use std::sync::{Arc, Mutex};
use std::thread;
use surfman;
@@ -1013,6 +1014,26 @@ impl WebGLImpl {
WebGLCommand::BufferSubData(buffer_type, offset, ref receiver) => {
gl::buffer_sub_data(gl, buffer_type, offset, &receiver.recv().unwrap())
},
+ WebGLCommand::CopyBufferSubData(src, dst, src_offset, dst_offset, size) => {
+ gl.copy_buffer_sub_data(
+ src,
+ dst,
+ src_offset as isize,
+ dst_offset as isize,
+ size as isize,
+ );
+ },
+ WebGLCommand::GetBufferSubData(buffer_type, offset, length, ref sender) => {
+ let ptr = gl.map_buffer_range(
+ buffer_type,
+ offset as isize,
+ length as isize,
+ gl::MAP_READ_BIT,
+ );
+ let data: &[u8] = unsafe { slice::from_raw_parts(ptr as _, length) };
+ sender.send(data).unwrap();
+ gl.unmap_buffer(buffer_type);
+ },
WebGLCommand::Clear(mask) => {
gl.clear(mask);
},