Handle FOV values in mock API

This commit is contained in:
Manish Goregaokar 2019-12-11 20:05:20 -08:00
parent bc1bd22d47
commit c2d3c646ef
2 changed files with 38 additions and 5 deletions

View file

@ -20,7 +20,7 @@ use ipc_channel::ipc::IpcSender;
use ipc_channel::router::ROUTER; use ipc_channel::router::ROUTER;
use profile_traits::ipc; use profile_traits::ipc;
use std::rc::Rc; use std::rc::Rc;
use webxr_api::{MockDeviceMsg, View, Views}; use webxr_api::{MockDeviceMsg, MockViewInit, MockViewsInit};
#[dom_struct] #[dom_struct]
pub struct FakeXRDevice { pub struct FakeXRDevice {
@ -50,7 +50,7 @@ impl FakeXRDevice {
} }
} }
pub fn get_views(views: &[FakeXRViewInit]) -> Fallible<Views> { pub fn get_views(views: &[FakeXRViewInit]) -> Fallible<MockViewsInit> {
if views.len() != 2 { if views.len() != 2 {
return Err(Error::NotSupported); return Err(Error::NotSupported);
} }
@ -91,17 +91,41 @@ pub fn get_views(views: &[FakeXRViewInit]) -> Fallible<Views> {
let viewport_l = Rect::new(origin_l, size_l); let viewport_l = Rect::new(origin_l, size_l);
let viewport_r = Rect::new(origin_r, size_r); 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, projection: proj_l,
transform: offset_l, transform: offset_l,
viewport: viewport_l, viewport: viewport_l,
fov: fov_l,
}; };
let right = View { let right = MockViewInit {
projection: proj_r, projection: proj_r,
transform: offset_r, transform: offset_r,
viewport: viewport_r, viewport: viewport_r,
fov: fov_r,
}; };
Ok(Views::Stereo(left, right)) Ok(MockViewsInit::Stereo(left, right))
} }
pub fn get_origin<T, U>( pub fn get_origin<T, U>(

View file

@ -43,6 +43,8 @@ dictionary FakeXRViewInit {
required FakeXRRigidTransformInit viewOffset; required FakeXRRigidTransformInit viewOffset;
// https://immersive-web.github.io/webxr/#dom-xrwebgllayer-getviewport // https://immersive-web.github.io/webxr/#dom-xrwebgllayer-getviewport
required FakeXRDeviceResolution resolution; required FakeXRDeviceResolution resolution;
FakeXRFieldOfViewInit fieldOfView;
}; };
// https://immersive-web.github.io/webxr/#xrviewport // https://immersive-web.github.io/webxr/#xrviewport
@ -59,3 +61,10 @@ dictionary FakeXRRigidTransformInit {
required sequence<float> position; required sequence<float> position;
required sequence<float> orientation; required sequence<float> orientation;
}; };
dictionary FakeXRFieldOfViewInit {
required float upDegrees;
required float downDegrees;
required float leftDegrees;
required float rightDegrees;
};