From c2d3c646efa19d04ef2d30c785ea995a9619166f Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Wed, 11 Dec 2019 20:05:20 -0800 Subject: [PATCH] Handle FOV values in mock API --- components/script/dom/fakexrdevice.rs | 34 ++++++++++++++++--- .../script/dom/webidls/FakeXRDevice.webidl | 9 +++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/components/script/dom/fakexrdevice.rs b/components/script/dom/fakexrdevice.rs index d3a09741d9b..1b5a9603749 100644 --- a/components/script/dom/fakexrdevice.rs +++ b/components/script/dom/fakexrdevice.rs @@ -20,7 +20,7 @@ use ipc_channel::ipc::IpcSender; use ipc_channel::router::ROUTER; use profile_traits::ipc; use std::rc::Rc; -use webxr_api::{MockDeviceMsg, View, Views}; +use webxr_api::{MockDeviceMsg, MockViewInit, MockViewsInit}; #[dom_struct] pub struct FakeXRDevice { @@ -50,7 +50,7 @@ impl FakeXRDevice { } } -pub fn get_views(views: &[FakeXRViewInit]) -> Fallible { +pub fn get_views(views: &[FakeXRViewInit]) -> Fallible { if views.len() != 2 { return Err(Error::NotSupported); } @@ -91,17 +91,41 @@ pub fn get_views(views: &[FakeXRViewInit]) -> Fallible { let viewport_l = Rect::new(origin_l, size_l); let viewport_r = Rect::new(origin_r, size_r); - let left = View { + let fov_l = if let Some(ref fov) = left.fieldOfView { + Some(( + fov.leftDegrees.to_radians(), + fov.rightDegrees.to_radians(), + fov.upDegrees.to_radians(), + fov.downDegrees.to_radians(), + )) + } else { + None + }; + + let fov_r = if let Some(ref fov) = right.fieldOfView { + Some(( + fov.leftDegrees.to_radians(), + fov.rightDegrees.to_radians(), + fov.upDegrees.to_radians(), + fov.downDegrees.to_radians(), + )) + } else { + None + }; + + let left = MockViewInit { projection: proj_l, transform: offset_l, viewport: viewport_l, + fov: fov_l, }; - let right = View { + let right = MockViewInit { projection: proj_r, transform: offset_r, viewport: viewport_r, + fov: fov_r, }; - Ok(Views::Stereo(left, right)) + Ok(MockViewsInit::Stereo(left, right)) } pub fn get_origin( diff --git a/components/script/dom/webidls/FakeXRDevice.webidl b/components/script/dom/webidls/FakeXRDevice.webidl index 058f52e3d1e..4dde2678435 100644 --- a/components/script/dom/webidls/FakeXRDevice.webidl +++ b/components/script/dom/webidls/FakeXRDevice.webidl @@ -43,6 +43,8 @@ dictionary FakeXRViewInit { required FakeXRRigidTransformInit viewOffset; // https://immersive-web.github.io/webxr/#dom-xrwebgllayer-getviewport required FakeXRDeviceResolution resolution; + + FakeXRFieldOfViewInit fieldOfView; }; // https://immersive-web.github.io/webxr/#xrviewport @@ -59,3 +61,10 @@ dictionary FakeXRRigidTransformInit { required sequence position; required sequence orientation; }; + +dictionary FakeXRFieldOfViewInit { + required float upDegrees; + required float downDegrees; + required float leftDegrees; + required float rightDegrees; +};