diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2018-04-04 07:19:26 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-04 07:19:26 -0400 |
commit | e06f0d32d0c3973d460a3035d2adfea298c8e5fe (patch) | |
tree | 70b5da2ad1ad04f03780ed1556551216eed8fb1f /components/script/dom/webglbuffer.rs | |
parent | 34b13dac66b48790003ccd069f4636f1def77e7d (diff) | |
parent | 93d2082acb3909b71c0f16252c9c332ad9cdc028 (diff) | |
download | servo-e06f0d32d0c3973d460a3035d2adfea298c8e5fe.tar.gz servo-e06f0d32d0c3973d460a3035d2adfea298c8e5fe.zip |
Auto merge of #20525 - servo:webgl2, r=emilio
More WebGL improvements
<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/20525)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/webglbuffer.rs')
-rw-r--r-- | components/script/dom/webglbuffer.rs | 20 |
1 files changed, 14 insertions, 6 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(()) } |