aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglrenderingcontext.rs
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <ecoal95@gmail.com>2016-09-18 00:41:41 -0700
committerEmilio Cobos Álvarez <ecoal95@gmail.com>2016-10-09 13:23:39 +0200
commitd7e2b40484dd401663f81a9c2cb0e5cc5acfa9ad (patch)
treeea5654365bd21cbafff287446aa2a3efc3edffd5 /components/script/dom/webglrenderingcontext.rs
parent7a559ad4429bd166cacca20c198d01b34f976813 (diff)
downloadservo-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.rs20
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(),