diff options
author | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2016-09-18 00:41:41 -0700 |
---|---|---|
committer | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2016-10-09 13:23:39 +0200 |
commit | d7e2b40484dd401663f81a9c2cb0e5cc5acfa9ad (patch) | |
tree | ea5654365bd21cbafff287446aa2a3efc3edffd5 /components/script/dom/webglrenderingcontext.rs | |
parent | 7a559ad4429bd166cacca20c198d01b34f976813 (diff) | |
download | servo-d7e2b40484dd401663f81a9c2cb0e5cc5acfa9ad.tar.gz servo-d7e2b40484dd401663f81a9c2cb0e5cc5acfa9ad.zip |
webgl: Honor ArrayBuffer or ArrayBufferView in bufferData and bufferSubData.
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index ae971503864..90e622be6c2 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -9,8 +9,8 @@ use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderi use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextMethods; use dom::bindings::codegen::UnionTypes::ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement; use dom::bindings::conversions::{ArrayBufferViewContents, ConversionResult, FromJSValConvertible, ToJSValConvertible}; -use dom::bindings::conversions::{array_buffer_view_data, array_buffer_view_data_checked, array_buffer_view_to_vec}; -use dom::bindings::conversions::array_buffer_view_to_vec_checked; +use dom::bindings::conversions::{array_buffer_to_vec, array_buffer_view_data, array_buffer_view_data_checked}; +use dom::bindings::conversions::{array_buffer_view_to_vec, array_buffer_view_to_vec_checked}; use dom::bindings::error::{Error, Fallible}; use dom::bindings::inheritance::Castable; use dom::bindings::js::{JS, LayoutJS, MutNullableHeap, Root}; @@ -883,7 +883,13 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { return Ok(self.webgl_error(InvalidValue)); } - let data_vec = try!(unsafe { fallible_array_buffer_view_to_vec::<u8>(data) }); + let data_vec = unsafe { + match array_buffer_to_vec::<u8>(data) { + Some(data) => data, + // Not an ArrayBuffer object, maybe an ArrayBufferView? + None => try!(fallible_array_buffer_view_to_vec::<u8>(data)), + } + }; let bound_buffer = match target { constants::ARRAY_BUFFER => self.bound_buffer_array.get(), @@ -915,7 +921,13 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { return Ok(self.webgl_error(InvalidValue)); } - let data_vec = try!(unsafe { fallible_array_buffer_view_to_vec::<u8>(data) }); + let data_vec = unsafe { + match array_buffer_to_vec::<u8>(data) { + Some(data) => data, + // Not an ArrayBuffer object, maybe an ArrayBufferView? + None => try!(fallible_array_buffer_view_to_vec::<u8>(data)), + } + }; let bound_buffer = match target { constants::ARRAY_BUFFER => self.bound_buffer_array.get(), |