aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/webglbuffer.rs20
-rw-r--r--components/script/dom/webglrenderingcontext.rs20
2 files changed, 16 insertions, 24 deletions
diff --git a/components/script/dom/webglbuffer.rs b/components/script/dom/webglbuffer.rs
index 4bb7959f8dd..5f00c7f45cc 100644
--- a/components/script/dom/webglbuffer.rs
+++ b/components/script/dom/webglbuffer.rs
@@ -7,6 +7,7 @@ use canvas_traits::webgl::{WebGLBufferId, WebGLCommand, WebGLError, WebGLMsgSend
use canvas_traits::webgl::webgl_channel;
use dom::bindings::cell::DomRefCell;
use dom::bindings::codegen::Bindings::WebGLBufferBinding;
+use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextConstants;
use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::root::DomRoot;
use dom::webglobject::WebGLObject;
@@ -86,18 +87,25 @@ impl WebGLBuffer {
Ok(())
}
- pub fn buffer_data(&self, target: u32, data: &[u8], usage: u32) -> WebGLResult<()> {
+ pub fn buffer_data<T>(&self, target: u32, data: T, usage: u32) -> WebGLResult<()>
+ where
+ T: Into<Vec<u8>>,
+ {
+ match usage {
+ WebGLRenderingContextConstants::STREAM_DRAW |
+ WebGLRenderingContextConstants::STATIC_DRAW |
+ WebGLRenderingContextConstants::DYNAMIC_DRAW => (),
+ _ => return Err(WebGLError::InvalidEnum),
+ }
+
if let Some(previous_target) = self.target.get() {
if target != previous_target {
return Err(WebGLError::InvalidOperation);
}
}
+ let data = data.into();
self.capacity.set(data.len());
- self.renderer.send(WebGLCommand::BufferData(
- target,
- data.to_vec().into(),
- usage,
- )).unwrap();
+ self.renderer.send(WebGLCommand::BufferData(target, data.into(), usage)).unwrap();
Ok(())
}
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 4fc569ca331..e40134e0310 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -1704,15 +1704,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
None => return Ok(self.webgl_error(InvalidValue)),
};
- match usage {
- constants::STREAM_DRAW |
- constants::STATIC_DRAW |
- constants::DYNAMIC_DRAW => (),
- _ => return Ok(self.webgl_error(InvalidEnum)),
- }
-
- handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, &data_vec, usage));
-
+ handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, data_vec, usage));
Ok(())
}
@@ -1733,18 +1725,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
return Ok(self.webgl_error(InvalidValue));
}
- match usage {
- constants::STREAM_DRAW |
- constants::STATIC_DRAW |
- constants::DYNAMIC_DRAW => (),
- _ => return Ok(self.webgl_error(InvalidEnum)),
- }
-
// FIXME: Allocating a buffer based on user-requested size is
// not great, but we don't have a fallible allocation to try.
let data = vec![0u8; size as usize];
- handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, &data, usage));
-
+ handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, data, usage));
Ok(())
}