aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xrray.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2024-11-24 13:01:35 -0500
committerGitHub <noreply@github.com>2024-11-24 18:01:35 +0000
commit3faed9b9212fee1f0ff9be5f7cfb5e24c5b84b91 (patch)
treef59efff26edc58b9cd32c08da070a6e27655ae82 /components/script/dom/xrray.rs
parente956f3124c230549c6ef4a63e2c27e56d0965453 (diff)
downloadservo-3faed9b9212fee1f0ff9be5f7cfb5e24c5b84b91.tar.gz
servo-3faed9b9212fee1f0ff9be5f7cfb5e24c5b84b91.zip
Filter out webidl files based on special comments, and feature-gate webxr interfaces. (#34348)
* Filter out webidl files based on skip-if directives. Signed-off-by: Josh Matthews <josh@joshmatthews.net> * script: Don't build XR functionality without webxr feature. Signed-off-by: Josh Matthews <josh@joshmatthews.net> * Fix tidy. Signed-off-by: Josh Matthews <josh@joshmatthews.net> * script: Adjust imports for file movement. Signed-off-by: Josh Matthews <josh@joshmatthews.net> * Fix clippy. Signed-off-by: Josh Matthews <josh@joshmatthews.net> * Formatting. Signed-off-by: Josh Matthews <josh@joshmatthews.net> * Clean up webxr module import. Co-authored-by: Samson <16504129+sagudev@users.noreply.github.com> Signed-off-by: Josh Matthews <josh@joshmatthews.net> --------- Signed-off-by: Josh Matthews <josh@joshmatthews.net> Co-authored-by: Samson <16504129+sagudev@users.noreply.github.com>
Diffstat (limited to 'components/script/dom/xrray.rs')
-rw-r--r--components/script/dom/xrray.rs174
1 files changed, 0 insertions, 174 deletions
diff --git a/components/script/dom/xrray.rs b/components/script/dom/xrray.rs
deleted file mode 100644
index d80a4c00d61..00000000000
--- a/components/script/dom/xrray.rs
+++ /dev/null
@@ -1,174 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-
-use dom_struct::dom_struct;
-use euclid::{Angle, RigidTransform3D, Rotation3D, Vector3D};
-use js::rust::HandleObject;
-use js::typedarray::{Float32, Float32Array};
-use webxr_api::{ApiSpace, Ray};
-
-use super::bindings::buffer_source::HeapBufferSource;
-use crate::dom::bindings::codegen::Bindings::DOMPointBinding::DOMPointInit;
-use crate::dom::bindings::codegen::Bindings::XRRayBinding::{XRRayDirectionInit, XRRayMethods};
-use crate::dom::bindings::error::{Error, Fallible};
-use crate::dom::bindings::reflector::{reflect_dom_object_with_proto, DomObject, Reflector};
-use crate::dom::bindings::root::DomRoot;
-use crate::dom::dompointreadonly::DOMPointReadOnly;
-use crate::dom::globalscope::GlobalScope;
-use crate::dom::window::Window;
-use crate::dom::xrrigidtransform::XRRigidTransform;
-use crate::script_runtime::{CanGc, JSContext};
-
-#[dom_struct]
-pub struct XRRay {
- reflector_: Reflector,
- #[ignore_malloc_size_of = "defined in webxr"]
- #[no_trace]
- ray: Ray<ApiSpace>,
- #[ignore_malloc_size_of = "defined in mozjs"]
- matrix: HeapBufferSource<Float32>,
-}
-
-impl XRRay {
- fn new_inherited(ray: Ray<ApiSpace>) -> XRRay {
- XRRay {
- reflector_: Reflector::new(),
- ray,
- matrix: HeapBufferSource::default(),
- }
- }
-
- fn new(
- global: &GlobalScope,
- proto: Option<HandleObject>,
- ray: Ray<ApiSpace>,
- can_gc: CanGc,
- ) -> DomRoot<XRRay> {
- reflect_dom_object_with_proto(Box::new(XRRay::new_inherited(ray)), global, proto, can_gc)
- }
-
- pub fn ray(&self) -> Ray<ApiSpace> {
- self.ray
- }
-}
-
-impl XRRayMethods<crate::DomTypeHolder> for XRRay {
- /// <https://immersive-web.github.io/hit-test/#dom-xrray-xrray>
- fn Constructor(
- window: &Window,
- proto: Option<HandleObject>,
- can_gc: CanGc,
- origin: &DOMPointInit,
- direction: &XRRayDirectionInit,
- ) -> Fallible<DomRoot<Self>> {
- if origin.w != 1.0 {
- return Err(Error::Type("Origin w coordinate must be 1".into()));
- }
- if *direction.w != 0.0 {
- return Err(Error::Type("Direction w coordinate must be 0".into()));
- }
- if *direction.x == 0.0 && *direction.y == 0.0 && *direction.z == 0.0 {
- return Err(Error::Type(
- "Direction vector cannot have zero length".into(),
- ));
- }
-
- let origin = Vector3D::new(origin.x as f32, origin.y as f32, origin.z as f32);
- let direction = Vector3D::new(
- *direction.x as f32,
- *direction.y as f32,
- *direction.z as f32,
- )
- .normalize();
-
- Ok(Self::new(
- &window.global(),
- proto,
- Ray { origin, direction },
- can_gc,
- ))
- }
-
- /// <https://immersive-web.github.io/hit-test/#dom-xrray-xrray-transform>
- fn Constructor_(
- window: &Window,
- proto: Option<HandleObject>,
- can_gc: CanGc,
- transform: &XRRigidTransform,
- ) -> Fallible<DomRoot<Self>> {
- let transform = transform.transform();
- let origin = transform.translation;
- let direction = transform
- .rotation
- .transform_vector3d(Vector3D::new(0., 0., -1.));
-
- Ok(Self::new(
- &window.global(),
- proto,
- Ray { origin, direction },
- can_gc,
- ))
- }
-
- /// <https://immersive-web.github.io/hit-test/#dom-xrray-origin>
- fn Origin(&self, can_gc: CanGc) -> DomRoot<DOMPointReadOnly> {
- DOMPointReadOnly::new(
- &self.global(),
- self.ray.origin.x as f64,
- self.ray.origin.y as f64,
- self.ray.origin.z as f64,
- 1.,
- can_gc,
- )
- }
-
- /// <https://immersive-web.github.io/hit-test/#dom-xrray-direction>
- fn Direction(&self, can_gc: CanGc) -> DomRoot<DOMPointReadOnly> {
- DOMPointReadOnly::new(
- &self.global(),
- self.ray.direction.x as f64,
- self.ray.direction.y as f64,
- self.ray.direction.z as f64,
- 0.,
- can_gc,
- )
- }
-
- /// <https://immersive-web.github.io/hit-test/#dom-xrray-matrix>
- fn Matrix(&self, _cx: JSContext) -> Float32Array {
- // https://immersive-web.github.io/hit-test/#xrray-obtain-the-matrix
- if !self.matrix.is_initialized() {
- // Step 1
- let z = Vector3D::new(0., 0., -1.);
- // Step 2
- let axis = z.cross(self.ray.direction);
- // Step 3
- let cos_angle = z.dot(self.ray.direction);
- // Step 4
- let rotation = if cos_angle > -1. && cos_angle < 1. {
- Rotation3D::around_axis(axis, Angle::radians(cos_angle.acos()))
- } else if cos_angle == -1. {
- let axis = Vector3D::new(1., 0., 0.);
- Rotation3D::around_axis(axis, Angle::radians(cos_angle.acos()))
- } else {
- Rotation3D::identity()
- };
- // Step 5
- let translation = self.ray.origin;
- // Step 6
- // According to the spec all matrices are column-major,
- // however euclid uses row vectors so we use .to_array()
- let arr = RigidTransform3D::new(rotation, translation)
- .to_transform()
- .to_array();
- self.matrix
- .set_data(_cx, &arr)
- .expect("Failed to set matrix data on XRRAy.")
- }
-
- self.matrix
- .get_buffer()
- .expect("Failed to get matrix from XRRay.")
- }
-}