diff options
Diffstat (limited to 'components/shared/webxr')
-rw-r--r-- | components/shared/webxr/device.rs | 6 | ||||
-rw-r--r-- | components/shared/webxr/events.rs | 7 | ||||
-rw-r--r-- | components/shared/webxr/lib.rs | 17 | ||||
-rw-r--r-- | components/shared/webxr/mock.rs | 8 | ||||
-rw-r--r-- | components/shared/webxr/registry.rs | 41 | ||||
-rw-r--r-- | components/shared/webxr/session.rs | 42 |
6 files changed, 64 insertions, 57 deletions
diff --git a/components/shared/webxr/device.rs b/components/shared/webxr/device.rs index 0c6a7161686..377294387d1 100644 --- a/components/shared/webxr/device.rs +++ b/components/shared/webxr/device.rs @@ -8,8 +8,8 @@ use euclid::{Point2D, RigidTransform3D}; use crate::{ ContextId, EnvironmentBlendMode, Error, Event, Floor, Frame, HitTestId, HitTestSource, - InputSource, LayerId, LayerInit, Native, Quitter, Sender, Session, SessionBuilder, SessionInit, - SessionMode, Viewports, + InputSource, LayerId, LayerInit, Native, Quitter, Session, SessionBuilder, SessionInit, + SessionMode, Viewports, WebXrSender, }; /// A trait for discovering XR devices @@ -47,7 +47,7 @@ pub trait DeviceAPI: 'static { fn initial_inputs(&self) -> Vec<InputSource>; /// Sets the event handling channel - fn set_event_dest(&mut self, dest: Sender<Event>); + fn set_event_dest(&mut self, dest: WebXrSender<Event>); /// Quit the session fn quit(&mut self); diff --git a/components/shared/webxr/events.rs b/components/shared/webxr/events.rs index c56332a0b7a..5a7928810bb 100644 --- a/components/shared/webxr/events.rs +++ b/components/shared/webxr/events.rs @@ -5,7 +5,8 @@ use euclid::RigidTransform3D; use crate::{ - ApiSpace, BaseSpace, Frame, InputFrame, InputId, InputSource, SelectEvent, SelectKind, Sender, + ApiSpace, BaseSpace, Frame, InputFrame, InputId, InputSource, SelectEvent, SelectKind, + WebXrSender, }; #[derive(Clone, Debug)] @@ -45,7 +46,7 @@ pub enum Visibility { /// when no event callback has been set pub enum EventBuffer { Buffered(Vec<Event>), - Sink(Sender<Event>), + Sink(WebXrSender<Event>), } impl Default for EventBuffer { @@ -64,7 +65,7 @@ impl EventBuffer { } } - pub fn upgrade(&mut self, dest: Sender<Event>) { + pub fn upgrade(&mut self, dest: WebXrSender<Event>) { if let EventBuffer::Buffered(ref mut events) = *self { for event in events.drain(..) { let _ = dest.send(event); diff --git a/components/shared/webxr/lib.rs b/components/shared/webxr/lib.rs index 2348947d3b9..563d1190c47 100644 --- a/components/shared/webxr/lib.rs +++ b/components/shared/webxr/lib.rs @@ -20,7 +20,7 @@ pub mod util; mod view; #[cfg(not(feature = "ipc"))] -pub use std::sync::mpsc::{Receiver, RecvTimeoutError, Sender}; +pub use std::sync::mpsc::{RecvTimeoutError, WebXrReceiver, WebXrSender}; #[cfg(feature = "ipc")] use std::thread; use std::time::Duration; @@ -37,11 +37,11 @@ pub use input::{ Handedness, InputFrame, InputId, InputSource, SelectEvent, SelectKind, TargetRayMode, }; #[cfg(feature = "ipc")] -pub use ipc_channel::ipc::channel; +pub use ipc_channel::ipc::channel as webxr_channel; #[cfg(feature = "ipc")] -pub use ipc_channel::ipc::IpcReceiver as Receiver; +pub use ipc_channel::ipc::IpcReceiver as WebXrReceiver; #[cfg(feature = "ipc")] -pub use ipc_channel::ipc::IpcSender as Sender; +pub use ipc_channel::ipc::IpcSender as WebXrSender; pub use layer::{ ContextId, GLContexts, GLTypes, LayerGrandManager, LayerGrandManagerAPI, LayerId, LayerInit, LayerLayout, LayerManager, LayerManagerAPI, LayerManagerFactory, SubImage, SubImages, @@ -63,18 +63,21 @@ pub use view::{ }; #[cfg(not(feature = "ipc"))] -pub fn channel<T>() -> Result<(Sender<T>, Receiver<T>), ()> { +pub fn webxr_channel<T>() -> Result<(WebXrWebXrSender<T>, WebXrWebXrReceiver<T>), ()> { Ok(std::sync::mpsc::channel()) } #[cfg(not(feature = "ipc"))] -pub fn recv_timeout<T>(receiver: &Receiver<T>, timeout: Duration) -> Result<T, RecvTimeoutError> { +pub fn recv_timeout<T>( + receiver: &WebXrReceiver<T>, + timeout: Duration, +) -> Result<T, RecvTimeoutError> { receiver.recv_timeout(timeout) } #[cfg(feature = "ipc")] pub fn recv_timeout<T>( - receiver: &Receiver<T>, + receiver: &WebXrReceiver<T>, timeout: Duration, ) -> Result<T, ipc_channel::ipc::TryRecvError> where diff --git a/components/shared/webxr/mock.rs b/components/shared/webxr/mock.rs index 5c8d855e5ab..b386f7d3ba5 100644 --- a/components/shared/webxr/mock.rs +++ b/components/shared/webxr/mock.rs @@ -8,8 +8,8 @@ use serde::{Deserialize, Serialize}; use crate::{ DiscoveryAPI, Display, EntityType, Error, Floor, Handedness, Input, InputId, InputSource, - LeftEye, Native, Receiver, RightEye, SelectEvent, SelectKind, Sender, TargetRayMode, Triangle, - Viewer, Viewport, Visibility, + LeftEye, Native, RightEye, SelectEvent, SelectKind, TargetRayMode, Triangle, Viewer, Viewport, + Visibility, WebXrReceiver, WebXrSender, }; /// A trait for discovering mock XR devices @@ -17,7 +17,7 @@ pub trait MockDiscoveryAPI<GL>: 'static { fn simulate_device_connection( &mut self, init: MockDeviceInit, - receiver: Receiver<MockDeviceMsg>, + receiver: WebXrReceiver<MockDeviceMsg>, ) -> Result<Box<dyn DiscoveryAPI<GL>>, Error>; } @@ -62,7 +62,7 @@ pub enum MockDeviceMsg { VisibilityChange(Visibility), SetWorld(MockWorld), ClearWorld, - Disconnect(Sender<()>), + Disconnect(WebXrSender<()>), SetBoundsGeometry(Vec<Point2D<f32, Floor>>), SimulateResetPose, } diff --git a/components/shared/webxr/registry.rs b/components/shared/webxr/registry.rs index 5835424e375..fc894b62fd6 100644 --- a/components/shared/webxr/registry.rs +++ b/components/shared/webxr/registry.rs @@ -8,14 +8,14 @@ use serde::{Deserialize, Serialize}; use crate::{ DiscoveryAPI, Error, Frame, GLTypes, LayerGrandManager, MainThreadSession, MockDeviceInit, - MockDeviceMsg, MockDiscoveryAPI, Receiver, Sender, Session, SessionBuilder, SessionId, - SessionInit, SessionMode, + MockDeviceMsg, MockDiscoveryAPI, Session, SessionBuilder, SessionId, SessionInit, SessionMode, + WebXrReceiver, WebXrSender, }; #[derive(Clone)] #[cfg_attr(feature = "ipc", derive(Serialize, Deserialize))] pub struct Registry { - sender: Sender<RegistryMsg>, + sender: WebXrSender<RegistryMsg>, waker: MainThreadWakerImpl, } @@ -23,8 +23,8 @@ pub struct MainThreadRegistry<GL> { discoveries: Vec<Box<dyn DiscoveryAPI<GL>>>, sessions: Vec<Box<dyn MainThreadSession>>, mocks: Vec<Box<dyn MockDiscoveryAPI<GL>>>, - sender: Sender<RegistryMsg>, - receiver: Receiver<RegistryMsg>, + sender: WebXrSender<RegistryMsg>, + receiver: WebXrReceiver<RegistryMsg>, waker: MainThreadWakerImpl, grand_manager: LayerGrandManager<GL>, next_session_id: u32, @@ -45,7 +45,7 @@ impl Clone for Box<dyn MainThreadWaker> { #[cfg_attr(feature = "ipc", derive(Serialize, Deserialize))] struct MainThreadWakerImpl { #[cfg(feature = "ipc")] - sender: Sender<()>, + sender: WebXrSender<()>, #[cfg(not(feature = "ipc"))] waker: Box<dyn MainThreadWaker>, } @@ -53,7 +53,7 @@ struct MainThreadWakerImpl { #[cfg(feature = "ipc")] impl MainThreadWakerImpl { fn new(waker: Box<dyn MainThreadWaker>) -> Result<MainThreadWakerImpl, Error> { - let (sender, receiver) = crate::channel().or(Err(Error::CommunicationError))?; + let (sender, receiver) = crate::webxr_channel().or(Err(Error::CommunicationError))?; ipc_channel::router::ROUTER.add_typed_route(receiver, Box::new(move |_| waker.wake())); Ok(MainThreadWakerImpl { sender }) } @@ -75,7 +75,7 @@ impl MainThreadWakerImpl { } impl Registry { - pub fn supports_session(&mut self, mode: SessionMode, dest: Sender<Result<(), Error>>) { + pub fn supports_session(&mut self, mode: SessionMode, dest: WebXrSender<Result<(), Error>>) { let _ = self.sender.send(RegistryMsg::SupportsSession(mode, dest)); self.waker.wake(); } @@ -84,8 +84,8 @@ impl Registry { &mut self, mode: SessionMode, init: SessionInit, - dest: Sender<Result<Session, Error>>, - animation_frame_handler: Sender<Frame>, + dest: WebXrSender<Result<Session, Error>>, + animation_frame_handler: WebXrSender<Frame>, ) { let _ = self.sender.send(RegistryMsg::RequestSession( mode, @@ -99,7 +99,7 @@ impl Registry { pub fn simulate_device_connection( &mut self, init: MockDeviceInit, - dest: Sender<Result<Sender<MockDeviceMsg>, Error>>, + dest: WebXrSender<Result<WebXrSender<MockDeviceMsg>, Error>>, ) { let _ = self .sender @@ -113,7 +113,7 @@ impl<GL: 'static + GLTypes> MainThreadRegistry<GL> { waker: Box<dyn MainThreadWaker>, grand_manager: LayerGrandManager<GL>, ) -> Result<Self, Error> { - let (sender, receiver) = crate::channel().or(Err(Error::CommunicationError))?; + let (sender, receiver) = crate::webxr_channel().or(Err(Error::CommunicationError))?; let discoveries = Vec::new(); let sessions = Vec::new(); let mocks = Vec::new(); @@ -199,7 +199,7 @@ impl<GL: 'static + GLTypes> MainThreadRegistry<GL> { &mut self, mode: SessionMode, init: SessionInit, - raf_sender: Sender<Frame>, + raf_sender: WebXrSender<Frame>, ) -> Result<Session, Error> { for discovery in &mut self.discoveries { if discovery.supports_session(mode) { @@ -225,9 +225,9 @@ impl<GL: 'static + GLTypes> MainThreadRegistry<GL> { fn simulate_device_connection( &mut self, init: MockDeviceInit, - ) -> Result<Sender<MockDeviceMsg>, Error> { + ) -> Result<WebXrSender<MockDeviceMsg>, Error> { for mock in &mut self.mocks { - let (sender, receiver) = crate::channel().or(Err(Error::CommunicationError))?; + let (sender, receiver) = crate::webxr_channel().or(Err(Error::CommunicationError))?; if let Ok(discovery) = mock.simulate_device_connection(init.clone(), receiver) { self.discoveries.insert(0, discovery); return Ok(sender); @@ -243,9 +243,12 @@ enum RegistryMsg { RequestSession( SessionMode, SessionInit, - Sender<Result<Session, Error>>, - Sender<Frame>, + WebXrSender<Result<Session, Error>>, + WebXrSender<Frame>, + ), + SupportsSession(SessionMode, WebXrSender<Result<(), Error>>), + SimulateDeviceConnection( + MockDeviceInit, + WebXrSender<Result<WebXrSender<MockDeviceMsg>, Error>>, ), - SupportsSession(SessionMode, Sender<Result<(), Error>>), - SimulateDeviceConnection(MockDeviceInit, Sender<Result<Sender<MockDeviceMsg>, Error>>), } diff --git a/components/shared/webxr/session.rs b/components/shared/webxr/session.rs index 17219d03868..4809ff5f17b 100644 --- a/components/shared/webxr/session.rs +++ b/components/shared/webxr/session.rs @@ -11,9 +11,9 @@ use log::warn; use serde::{Deserialize, Serialize}; use crate::{ - channel, ContextId, DeviceAPI, Error, Event, Floor, Frame, FrameUpdateEvent, HitTestId, - HitTestSource, InputSource, LayerGrandManager, LayerId, LayerInit, Native, Receiver, Sender, - Viewport, Viewports, + webxr_channel, ContextId, DeviceAPI, Error, Event, Floor, Frame, FrameUpdateEvent, HitTestId, + HitTestSource, InputSource, LayerGrandManager, LayerId, LayerInit, Native, Viewport, Viewports, + WebXrReceiver, WebXrSender, }; // How long to wait for an rAF. @@ -89,24 +89,24 @@ pub enum EnvironmentBlendMode { #[derive(Debug)] #[cfg_attr(feature = "ipc", derive(Serialize, Deserialize))] enum SessionMsg { - CreateLayer(ContextId, LayerInit, Sender<Result<LayerId, Error>>), + CreateLayer(ContextId, LayerInit, WebXrSender<Result<LayerId, Error>>), DestroyLayer(ContextId, LayerId), SetLayers(Vec<(ContextId, LayerId)>), - SetEventDest(Sender<Event>), + SetEventDest(WebXrSender<Event>), UpdateClipPlanes(/* near */ f32, /* far */ f32), StartRenderLoop, RenderAnimationFrame, RequestHitTest(HitTestSource), CancelHitTest(HitTestId), - UpdateFrameRate(f32, Sender<f32>), + UpdateFrameRate(f32, WebXrSender<f32>), Quit, - GetBoundsGeometry(Sender<Option<Vec<Point2D<f32, Floor>>>>), + GetBoundsGeometry(WebXrSender<Option<Vec<Point2D<f32, Floor>>>>), } #[cfg_attr(feature = "ipc", derive(Serialize, Deserialize))] #[derive(Clone)] pub struct Quitter { - sender: Sender<SessionMsg>, + sender: WebXrSender<SessionMsg>, } impl Quitter { @@ -122,7 +122,7 @@ impl Quitter { pub struct Session { floor_transform: Option<RigidTransform3D<f32, Native, Floor>>, viewports: Viewports, - sender: Sender<SessionMsg>, + sender: WebXrSender<SessionMsg>, environment_blend_mode: EnvironmentBlendMode, initial_inputs: Vec<InputSource>, granted_features: Vec<String>, @@ -144,7 +144,7 @@ impl Session { } pub fn reference_space_bounds(&self) -> Option<Vec<Point2D<f32, Floor>>> { - let (sender, receiver) = channel().ok()?; + let (sender, receiver) = webxr_channel().ok()?; let _ = self.sender.send(SessionMsg::GetBoundsGeometry(sender)); receiver.recv().ok()? } @@ -175,7 +175,7 @@ impl Session { } pub fn create_layer(&self, context_id: ContextId, init: LayerInit) -> Result<LayerId, Error> { - let (sender, receiver) = channel().map_err(|_| Error::CommunicationError)?; + let (sender, receiver) = webxr_channel().map_err(|_| Error::CommunicationError)?; let _ = self .sender .send(SessionMsg::CreateLayer(context_id, init, sender)); @@ -201,7 +201,7 @@ impl Session { let _ = self.sender.send(SessionMsg::UpdateClipPlanes(near, far)); } - pub fn set_event_dest(&mut self, dest: Sender<Event>) { + pub fn set_event_dest(&mut self, dest: WebXrSender<Event>) { let _ = self.sender.send(SessionMsg::SetEventDest(dest)); } @@ -233,7 +233,7 @@ impl Session { let _ = self.sender.send(SessionMsg::CancelHitTest(id)); } - pub fn update_frame_rate(&mut self, rate: f32, sender: Sender<f32>) { + pub fn update_frame_rate(&mut self, rate: f32, sender: WebXrSender<f32>) { let _ = self.sender.send(SessionMsg::UpdateFrameRate(rate, sender)); } @@ -251,12 +251,12 @@ enum RenderState { /// For devices that want to do their own thread management, the `SessionThread` type is exposed. pub struct SessionThread<Device> { - receiver: Receiver<SessionMsg>, - sender: Sender<SessionMsg>, + receiver: WebXrReceiver<SessionMsg>, + sender: WebXrSender<SessionMsg>, layers: Vec<(ContextId, LayerId)>, pending_layers: Option<Vec<(ContextId, LayerId)>>, frame_count: u64, - frame_sender: Sender<Frame>, + frame_sender: WebXrSender<Frame>, running: bool, device: Device, id: SessionId, @@ -269,10 +269,10 @@ where { pub fn new( mut device: Device, - frame_sender: Sender<Frame>, + frame_sender: WebXrSender<Frame>, id: SessionId, ) -> Result<Self, Error> { - let (sender, receiver) = crate::channel().or(Err(Error::CommunicationError))?; + let (sender, receiver) = crate::webxr_channel().or(Err(Error::CommunicationError))?; device.set_quitter(Quitter { sender: sender.clone(), }); @@ -440,7 +440,7 @@ where /// A type for building XR sessions pub struct SessionBuilder<'a, GL> { sessions: &'a mut Vec<Box<dyn MainThreadSession>>, - frame_sender: Sender<Frame>, + frame_sender: WebXrSender<Frame>, layer_grand_manager: LayerGrandManager<GL>, id: SessionId, } @@ -452,7 +452,7 @@ impl<'a, GL: 'static> SessionBuilder<'a, GL> { pub(crate) fn new( sessions: &'a mut Vec<Box<dyn MainThreadSession>>, - frame_sender: Sender<Frame>, + frame_sender: WebXrSender<Frame>, layer_grand_manager: LayerGrandManager<GL>, id: SessionId, ) -> Self { @@ -470,7 +470,7 @@ impl<'a, GL: 'static> SessionBuilder<'a, GL> { Factory: 'static + FnOnce(LayerGrandManager<GL>) -> Result<Device, Error> + Send, Device: DeviceAPI, { - let (acks, ackr) = crate::channel().or(Err(Error::CommunicationError))?; + let (acks, ackr) = crate::webxr_channel().or(Err(Error::CommunicationError))?; let frame_sender = self.frame_sender; let layer_grand_manager = self.layer_grand_manager; let id = self.id; |