diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2019-07-08 17:17:13 -0700 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2019-07-11 11:12:59 -0700 |
commit | 8780edb16563ac7d519091023a9ecf894c21fd0f (patch) | |
tree | 0768b81fc7feaadbe8351d187335dfe87790e313 /components/script/dom/xrrigidtransform.rs | |
parent | 104a712a28beef693d727170bf25684bb618e5aa (diff) | |
download | servo-8780edb16563ac7d519091023a9ecf894c21fd0f.tar.gz servo-8780edb16563ac7d519091023a9ecf894c21fd0f.zip |
Hook webxr data into XRFrame/XRView/XRSpace
Diffstat (limited to 'components/script/dom/xrrigidtransform.rs')
-rw-r--r-- | components/script/dom/xrrigidtransform.rs | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/components/script/dom/xrrigidtransform.rs b/components/script/dom/xrrigidtransform.rs index f75d3f085fb..5e1f720411e 100644 --- a/components/script/dom/xrrigidtransform.rs +++ b/components/script/dom/xrrigidtransform.rs @@ -14,8 +14,9 @@ use crate::dom::dompointreadonly::DOMPointReadOnly; use crate::dom::globalscope::GlobalScope; use crate::dom::vrframedata::create_typed_array; use crate::dom::window::Window; +use crate::dom::xrsession::ApiRigidTransform; use dom_struct::dom_struct; -use euclid::{RigidTransform3D, Rotation3D, Vector3D}; +use euclid::{TypedRigidTransform3D, TypedRotation3D, TypedVector3D}; use js::jsapi::{Heap, JSContext, JSObject}; use std::ptr::NonNull; @@ -25,14 +26,14 @@ pub struct XRRigidTransform { position: MutNullableDom<DOMPointReadOnly>, orientation: MutNullableDom<DOMPointReadOnly>, #[ignore_malloc_size_of = "defined in euclid"] - transform: RigidTransform3D<f64>, + transform: ApiRigidTransform, inverse: MutNullableDom<XRRigidTransform>, #[ignore_malloc_size_of = "defined in mozjs"] matrix: Heap<*mut JSObject>, } impl XRRigidTransform { - fn new_inherited(transform: RigidTransform3D<f64>) -> XRRigidTransform { + fn new_inherited(transform: ApiRigidTransform) -> XRRigidTransform { XRRigidTransform { reflector_: Reflector::new(), position: MutNullableDom::default(), @@ -43,10 +44,7 @@ impl XRRigidTransform { } } - pub fn new( - global: &GlobalScope, - transform: RigidTransform3D<f64>, - ) -> DomRoot<XRRigidTransform> { + pub fn new(global: &GlobalScope, transform: ApiRigidTransform) -> DomRoot<XRRigidTransform> { reflect_dom_object( Box::new(XRRigidTransform::new_inherited(transform)), global, @@ -55,7 +53,7 @@ impl XRRigidTransform { } pub fn identity(window: &GlobalScope) -> DomRoot<XRRigidTransform> { - let transform = RigidTransform3D::identity(); + let transform = TypedRigidTransform3D::identity(); XRRigidTransform::new(window, transform) } @@ -72,14 +70,14 @@ impl XRRigidTransform { ))); } - let translate = Vector3D::new(position.x as f64, position.y as f64, position.z as f64); - let rotate = Rotation3D::unit_quaternion( - orientation.x as f64, - orientation.y as f64, - orientation.z as f64, - orientation.w as f64, + let translate = TypedVector3D::new(position.x as f32, position.y as f32, position.z as f32); + let rotate = TypedRotation3D::unit_quaternion( + orientation.x as f32, + orientation.y as f32, + orientation.z as f32, + orientation.w as f32, ); - let transform = RigidTransform3D::new(rotate, translate); + let transform = TypedRigidTransform3D::new(rotate, translate); Ok(XRRigidTransform::new(&window.global(), transform)) } } @@ -89,14 +87,20 @@ impl XRRigidTransformMethods for XRRigidTransform { fn Position(&self) -> DomRoot<DOMPointReadOnly> { self.position.or_init(|| { let t = &self.transform.translation; - DOMPointReadOnly::new(&self.global(), t.x, t.y, t.z, 1.0) + DOMPointReadOnly::new(&self.global(), t.x.into(), t.y.into(), t.z.into(), 1.0) }) } // https://immersive-web.github.io/webxr/#dom-xrrigidtransform-orientation fn Orientation(&self) -> DomRoot<DOMPointReadOnly> { self.orientation.or_init(|| { let r = &self.transform.rotation; - DOMPointReadOnly::new(&self.global(), r.i, r.j, r.k, r.r) + DOMPointReadOnly::new( + &self.global(), + r.i.into(), + r.j.into(), + r.k.into(), + r.r.into(), + ) }) } // https://immersive-web.github.io/webxr/#dom-xrrigidtransform-inverse @@ -114,7 +118,7 @@ impl XRRigidTransformMethods for XRRigidTransform { let cx = self.global().get_cx(); // According to the spec all matrices are column-major, // however euclid uses row vectors so we use .to_row_major_array() - let arr = self.transform.to_transform().cast().to_row_major_array(); + let arr = self.transform.to_transform().to_row_major_array(); create_typed_array(cx, &arr, &self.matrix); } NonNull::new(self.matrix.get()).unwrap() @@ -123,7 +127,7 @@ impl XRRigidTransformMethods for XRRigidTransform { impl XRRigidTransform { /// https://immersive-web.github.io/webxr/#dom-xrpose-transform - pub fn transform(&self) -> RigidTransform3D<f64> { + pub fn transform(&self) -> ApiRigidTransform { self.transform } } |