diff options
Diffstat (limited to 'components/canvas')
-rw-r--r-- | components/canvas/webgl_thread.rs | 21 |
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); }, |