diff options
author | deror1869107 <sungyuanyao@gmail.com> | 2017-02-08 03:03:30 +0800 |
---|---|---|
committer | deror1869107 <sungyuanyao@gmail.com> | 2017-02-11 23:25:14 +0800 |
commit | 2d99f7f995ad532e5f70526bca95dfcc1ae5c97e (patch) | |
tree | 5c2976d303aea40e5d0a1f105f0291814560b238 /components/script/dom | |
parent | d010d2c6752c9a2d44f10f41f0c873ff7791a4e5 (diff) | |
download | servo-2d99f7f995ad532e5f70526bca95dfcc1ae5c97e.tar.gz servo-2d99f7f995ad532e5f70526bca95dfcc1ae5c97e.zip |
Remove slice_to_array_buffer_view and update_array_buffer_view
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/bindings/conversions.rs | 20 | ||||
-rw-r--r-- | components/script/dom/vreyeparameters.rs | 7 | ||||
-rw-r--r-- | components/script/dom/vrframedata.rs | 44 | ||||
-rw-r--r-- | components/script/dom/vrpose.rs | 9 | ||||
-rw-r--r-- | components/script/dom/vrstageparameters.rs | 16 |
5 files changed, 54 insertions, 42 deletions
diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs index e1869863c6c..3c8aad319d3 100644 --- a/components/script/dom/bindings/conversions.rs +++ b/components/script/dom/bindings/conversions.rs @@ -580,23 +580,3 @@ pub unsafe fn is_array_like(cx: *mut JSContext, value: HandleValue) -> bool { assert!(JS_IsArrayObject(cx, value, &mut result)); result } - -/// Creates a typed JS array from a Rust slice -pub unsafe fn slice_to_array_buffer_view<T>(cx: *mut JSContext, data: &[T]) -> *mut JSObject - where T: ArrayBufferViewContents -{ - let js_object = T::new(cx, data.len() as u32); - assert!(!js_object.is_null()); - update_array_buffer_view(js_object, data); - js_object -} - -/// Updates a typed JS array from a Rust slice -pub unsafe fn update_array_buffer_view<T>(obj: *mut JSObject, data: &[T]) - where T: ArrayBufferViewContents -{ - let mut buffer = array_buffer_view_data(obj); - if let Some(ref mut buffer) = buffer { - ptr::copy_nonoverlapping(&data[0], &mut buffer[0], data.len()) - } -} diff --git a/components/script/dom/vreyeparameters.rs b/components/script/dom/vreyeparameters.rs index ca544f03456..d6f654b2cb6 100644 --- a/components/script/dom/vreyeparameters.rs +++ b/components/script/dom/vreyeparameters.rs @@ -6,12 +6,12 @@ use core::nonzero::NonZero; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::VREyeParametersBinding; use dom::bindings::codegen::Bindings::VREyeParametersBinding::VREyeParametersMethods; -use dom::bindings::conversions::slice_to_array_buffer_view; use dom::bindings::js::{JS, Root}; use dom::bindings::reflector::{Reflector, reflect_dom_object}; use dom::globalscope::GlobalScope; use dom::vrfieldofview::VRFieldOfView; use js::jsapi::{Heap, JSContext, JSObject}; +use js::typedarray::Float32Array; use std::default::Default; use webvr_traits::WebVREyeParameters; @@ -39,7 +39,10 @@ impl VREyeParameters { }; unsafe { - result.offset.set(slice_to_array_buffer_view(global.get_cx(), &result.parameters.borrow().offset)); + let _ = Float32Array::create(global.get_cx(), + result.parameters.borrow().offset.len() as u32, + Some(&result.parameters.borrow().offset), + result.offset.handle_mut()); } result } diff --git a/components/script/dom/vrframedata.rs b/components/script/dom/vrframedata.rs index 14cbe9bdbab..304c3a47b87 100644 --- a/components/script/dom/vrframedata.rs +++ b/components/script/dom/vrframedata.rs @@ -5,7 +5,6 @@ use core::nonzero::NonZero; use dom::bindings::codegen::Bindings::VRFrameDataBinding; use dom::bindings::codegen::Bindings::VRFrameDataBinding::VRFrameDataMethods; -use dom::bindings::conversions::{slice_to_array_buffer_view, update_array_buffer_view}; use dom::bindings::error::Fallible; use dom::bindings::js::{JS, Root}; use dom::bindings::num::Finite; @@ -14,6 +13,7 @@ use dom::globalscope::GlobalScope; use dom::vrpose::VRPose; use dom::window::Window; use js::jsapi::{Heap, JSContext, JSObject}; +use js::typedarray::Float32Array; use std::cell::Cell; use webvr_traits::WebVRFrameData; @@ -50,16 +50,23 @@ impl VRFrameData { first_timestamp: Cell::new(0.0) }; + let root = reflect_dom_object(box framedata, + global, + VRFrameDataBinding::Wrap); + unsafe { - framedata.left_proj.set(slice_to_array_buffer_view(global.get_cx(), &matrix)); - framedata.left_view.set(slice_to_array_buffer_view(global.get_cx(), &matrix)); - framedata.right_proj.set(slice_to_array_buffer_view(global.get_cx(), &matrix)); - framedata.right_view.set(slice_to_array_buffer_view(global.get_cx(), &matrix)); + let ref framedata = *root; + let _ = Float32Array::create(global.get_cx(), matrix.len() as u32, Some(&matrix), + framedata.left_proj.handle_mut()); + let _ = Float32Array::create(global.get_cx(), matrix.len() as u32, Some(&matrix), + framedata.left_view.handle_mut()); + let _ = Float32Array::create(global.get_cx(), matrix.len() as u32, Some(&matrix), + framedata.right_proj.handle_mut()); + let _ = Float32Array::create(global.get_cx(), matrix.len() as u32, Some(&matrix), + framedata.right_view.handle_mut()); } - reflect_dom_object(box framedata, - global, - VRFrameDataBinding::Wrap) + root } pub fn Constructor(window: &Window) -> Fallible<Root<VRFrameData>> { @@ -72,10 +79,23 @@ impl VRFrameData { #[allow(unsafe_code)] pub fn update(&self, data: &WebVRFrameData) { unsafe { - update_array_buffer_view(self.left_proj.get(), &data.left_projection_matrix); - update_array_buffer_view(self.left_view.get(), &data.left_view_matrix); - update_array_buffer_view(self.right_proj.get(), &data.right_projection_matrix); - update_array_buffer_view(self.right_view.get(), &data.right_view_matrix); + let cx = self.global().get_cx(); + typedarray!(in(cx) let left_proj_array: Float32Array = self.left_proj.get()); + if let Ok(mut array) = left_proj_array { + array.update(&data.left_projection_matrix); + } + typedarray!(in(cx) let left_view_array: Float32Array = self.left_view.get()); + if let Ok(mut array) = left_view_array { + array.update(&data.left_view_matrix); + } + typedarray!(in(cx) let right_proj_array: Float32Array = self.right_proj.get()); + if let Ok(mut array) = right_proj_array { + array.update(&data.right_projection_matrix); + } + typedarray!(in(cx) let right_view_array: Float32Array = self.right_view.get()); + if let Ok(mut array) = right_view_array { + array.update(&data.right_view_matrix); + } } self.pose.update(&data.pose); self.timestamp.set(data.timestamp); diff --git a/components/script/dom/vrpose.rs b/components/script/dom/vrpose.rs index cbf56c5cc26..11ad1c96887 100644 --- a/components/script/dom/vrpose.rs +++ b/components/script/dom/vrpose.rs @@ -6,11 +6,11 @@ use core::nonzero::NonZero; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::VRPoseBinding; use dom::bindings::codegen::Bindings::VRPoseBinding::VRPoseMethods; -use dom::bindings::conversions::{slice_to_array_buffer_view, update_array_buffer_view}; use dom::bindings::js::Root; use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; use dom::globalscope::GlobalScope; use js::jsapi::{Heap, JSContext, JSObject}; +use js::typedarray::Float32Array; use std::ptr; use webvr_traits::webvr; @@ -33,9 +33,12 @@ unsafe fn update_or_create_typed_array(cx: *mut JSContext, match src { Some(ref data) => { if dst.get().is_null() { - dst.set(slice_to_array_buffer_view(cx, &data)); + let _ = Float32Array::create(cx, data.len() as u32, src, dst.handle_mut()); } else { - update_array_buffer_view(dst.get(), &data); + typedarray!(in(cx) let array: Float32Array = dst.get()); + if let Ok(mut array) = array { + array.update(data); + } } }, None => { diff --git a/components/script/dom/vrstageparameters.rs b/components/script/dom/vrstageparameters.rs index 481bc027271..6dc040ce617 100644 --- a/components/script/dom/vrstageparameters.rs +++ b/components/script/dom/vrstageparameters.rs @@ -6,12 +6,12 @@ use core::nonzero::NonZero; use dom::bindings::cell::DOMRefCell; use dom::bindings::codegen::Bindings::VRStageParametersBinding; use dom::bindings::codegen::Bindings::VRStageParametersBinding::VRStageParametersMethods; -use dom::bindings::conversions::{slice_to_array_buffer_view, update_array_buffer_view}; use dom::bindings::js::Root; use dom::bindings::num::Finite; -use dom::bindings::reflector::{Reflector, reflect_dom_object}; +use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; use dom::globalscope::GlobalScope; use js::jsapi::{Heap, JSContext, JSObject}; +use js::typedarray::Float32Array; use webvr_traits::WebVRStageParameters; #[dom_struct] @@ -34,8 +34,10 @@ impl VRStageParameters { transform: Heap::default() }; unsafe { - stage.transform.set(slice_to_array_buffer_view(global.get_cx(), - &stage.parameters.borrow().sitting_to_standing_transform)); + let _ = Float32Array::create(global.get_cx(), + stage.parameters.borrow().sitting_to_standing_transform.len() as u32, + Some(&stage.parameters.borrow().sitting_to_standing_transform), + stage.transform.handle_mut()); } stage @@ -50,7 +52,11 @@ impl VRStageParameters { #[allow(unsafe_code)] pub fn update(&self, parameters: &WebVRStageParameters) { unsafe { - update_array_buffer_view(self.transform.get(), ¶meters.sitting_to_standing_transform); + let cx = self.global().get_cx(); + typedarray!(in(cx) let array: Float32Array = self.transform.get()); + if let Ok(mut array) = array { + array.update(¶meters.sitting_to_standing_transform); + } } *self.parameters.borrow_mut() = parameters.clone(); } |