diff options
Diffstat (limited to 'components/script/dom/vrframedata.rs')
-rw-r--r-- | components/script/dom/vrframedata.rs | 59 |
1 files changed, 30 insertions, 29 deletions
diff --git a/components/script/dom/vrframedata.rs b/components/script/dom/vrframedata.rs index 25f6af821a7..9cfcadd96a8 100644 --- a/components/script/dom/vrframedata.rs +++ b/components/script/dom/vrframedata.rs @@ -11,8 +11,9 @@ use crate::dom::bindings::root::{Dom, DomRoot}; use crate::dom::globalscope::GlobalScope; use crate::dom::vrpose::VRPose; use crate::dom::window::Window; +use crate::script_runtime::JSContext; use dom_struct::dom_struct; -use js::jsapi::{Heap, JSContext, JSObject}; +use js::jsapi::{Heap, JSObject}; use js::typedarray::{CreateWith, Float32Array}; use std::cell::Cell; use std::ptr; @@ -61,13 +62,11 @@ impl VRFrameData { global, VRFrameDataBinding::Wrap, ); - let cx = global.get_cx(); - unsafe { - create_typed_array(cx, &matrix, &root.left_proj); - create_typed_array(cx, &matrix, &root.left_view); - create_typed_array(cx, &matrix, &root.right_proj); - create_typed_array(cx, &matrix, &root.right_view); - } + let cx = unsafe { JSContext::from_ptr(global.get_cx()) }; + create_typed_array(cx, &matrix, &root.left_proj); + create_typed_array(cx, &matrix, &root.left_view); + create_typed_array(cx, &matrix, &root.right_proj); + create_typed_array(cx, &matrix, &root.right_view); root } @@ -79,9 +78,11 @@ impl VRFrameData { /// FIXME(#22526) this should be in a better place #[allow(unsafe_code)] -pub unsafe fn create_typed_array(cx: *mut JSContext, src: &[f32], dst: &Heap<*mut JSObject>) { - rooted!(in (cx) let mut array = ptr::null_mut::<JSObject>()); - let _ = Float32Array::create(cx, CreateWith::Slice(src), array.handle_mut()); +pub fn create_typed_array(cx: JSContext, src: &[f32], dst: &Heap<*mut JSObject>) { + rooted!(in (*cx) let mut array = ptr::null_mut::<JSObject>()); + unsafe { + let _ = Float32Array::create(*cx, CreateWith::Slice(src), array.handle_mut()); + } (*dst).set(array.get()); } @@ -89,28 +90,28 @@ impl VRFrameData { #[allow(unsafe_code)] pub fn update(&self, data: &WebVRFrameData) { unsafe { - let cx = self.global().get_cx(); - typedarray!(in(cx) let left_proj_array: Float32Array = self.left_proj.get()); + let cx = JSContext::from_ptr(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()); + 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()); + 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()); + 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); - if self.first_timestamp.get() == 0.0 { - self.first_timestamp.set(data.timestamp); + self.pose.update(&data.pose); + self.timestamp.set(data.timestamp); + if self.first_timestamp.get() == 0.0 { + self.first_timestamp.set(data.timestamp); + } } } } @@ -123,26 +124,26 @@ impl VRFrameDataMethods for VRFrameData { #[allow(unsafe_code)] // https://w3c.github.io/webvr/#dom-vrframedata-leftprojectionmatrix - unsafe fn LeftProjectionMatrix(&self, _cx: *mut JSContext) -> NonNull<JSObject> { - NonNull::new_unchecked(self.left_proj.get()) + fn LeftProjectionMatrix(&self, _cx: JSContext) -> NonNull<JSObject> { + unsafe { NonNull::new_unchecked(self.left_proj.get()) } } #[allow(unsafe_code)] // https://w3c.github.io/webvr/#dom-vrframedata-leftviewmatrix - unsafe fn LeftViewMatrix(&self, _cx: *mut JSContext) -> NonNull<JSObject> { - NonNull::new_unchecked(self.left_view.get()) + fn LeftViewMatrix(&self, _cx: JSContext) -> NonNull<JSObject> { + unsafe { NonNull::new_unchecked(self.left_view.get()) } } #[allow(unsafe_code)] // https://w3c.github.io/webvr/#dom-vrframedata-rightprojectionmatrix - unsafe fn RightProjectionMatrix(&self, _cx: *mut JSContext) -> NonNull<JSObject> { - NonNull::new_unchecked(self.right_proj.get()) + fn RightProjectionMatrix(&self, _cx: JSContext) -> NonNull<JSObject> { + unsafe { NonNull::new_unchecked(self.right_proj.get()) } } #[allow(unsafe_code)] // https://w3c.github.io/webvr/#dom-vrframedata-rightviewmatrix - unsafe fn RightViewMatrix(&self, _cx: *mut JSContext) -> NonNull<JSObject> { - NonNull::new_unchecked(self.right_view.get()) + fn RightViewMatrix(&self, _cx: JSContext) -> NonNull<JSObject> { + unsafe { NonNull::new_unchecked(self.right_view.get()) } } // https://w3c.github.io/webvr/#dom-vrframedata-pose |