XRRigidTransform.inverse is now a lazy attribute

This commit is contained in:
Manish Goregaokar 2019-04-03 11:33:06 -07:00
parent fcec93ae16
commit eb837d1ed7
2 changed files with 6 additions and 2 deletions

View file

@ -10,5 +10,5 @@ interface XRRigidTransform {
readonly attribute DOMPointReadOnly position; readonly attribute DOMPointReadOnly position;
readonly attribute DOMPointReadOnly orientation; readonly attribute DOMPointReadOnly orientation;
// readonly attribute Float32Array matrix; // readonly attribute Float32Array matrix;
XRRigidTransform inverse(); readonly attribute XRRigidTransform inverse;
}; };

View file

@ -23,6 +23,7 @@ pub struct XRRigidTransform {
orientation: MutNullableDom<DOMPointReadOnly>, orientation: MutNullableDom<DOMPointReadOnly>,
#[ignore_malloc_size_of = "defined in euclid"] #[ignore_malloc_size_of = "defined in euclid"]
transform: RigidTransform3D<f64>, transform: RigidTransform3D<f64>,
inverse: MutNullableDom<XRRigidTransform>,
} }
impl XRRigidTransform { impl XRRigidTransform {
@ -32,6 +33,7 @@ impl XRRigidTransform {
position: MutNullableDom::default(), position: MutNullableDom::default(),
orientation: MutNullableDom::default(), orientation: MutNullableDom::default(),
transform, transform,
inverse: MutNullableDom::default(),
} }
} }
@ -93,7 +95,9 @@ impl XRRigidTransformMethods for XRRigidTransform {
} }
// https://immersive-web.github.io/webxr/#dom-xrrigidtransform-inverse // https://immersive-web.github.io/webxr/#dom-xrrigidtransform-inverse
fn Inverse(&self) -> DomRoot<XRRigidTransform> { fn Inverse(&self) -> DomRoot<XRRigidTransform> {
XRRigidTransform::new(&self.global(), self.transform.inverse()) self.inverse.or_init(|| {
XRRigidTransform::new(&self.global(), self.transform.inverse())
})
} }
} }