Replace use of callbacks in webxr by channels

This commit is contained in:
Alan Jeffrey 2019-07-23 18:21:48 -05:00
parent 5c8fee4e0b
commit 133a17e15c
11 changed files with 109 additions and 190 deletions

View file

@ -124,18 +124,6 @@ impl XRSession {
}
fn attach_event_handler(&self) {
#[derive(serde::Serialize, serde::Deserialize)]
pub struct EventCallback {
sender: IpcSender<XREvent>,
}
#[typetag::serde]
impl webxr_api::EventCallback for EventCallback {
fn callback(&mut self, event: XREvent) {
let _ = self.sender.send(event);
}
}
let this = Trusted::new(self);
let global = self.global();
let window = global.as_window();
@ -143,6 +131,7 @@ impl XRSession {
.task_manager()
.dom_manipulation_task_source_with_canceller();
let (sender, receiver) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
ROUTER.add_route(
receiver.to_opaque(),
Box::new(move |message| {
@ -157,9 +146,7 @@ impl XRSession {
);
// request animation frame
self.session
.borrow_mut()
.set_event_callback(EventCallback { sender });
self.session.borrow_mut().set_event_dest(sender);
}
fn event_callback(&self, event: XREvent) {
@ -195,13 +182,10 @@ impl XRSession {
// Step 6-7: XXXManishearth handle inlineVerticalFieldOfView
// XXXManishearth handle inline sessions and composition disabled flag
let layer = pending.GetBaseLayer();
if let Some(layer) = layer {
let mut session = self.session.borrow_mut();
session.update_webgl_external_image_api(
layer.Context().webgl_sender().webxr_external_image_api(),
);
}
let context = pending
.GetBaseLayer()
.map(|layer| layer.Context().context_id().0);
self.session.borrow_mut().set_webgl_context(context);
}
// Step 2
@ -289,18 +273,6 @@ impl XRSessionMethods for XRSession {
/// https://immersive-web.github.io/webxr/#dom-xrsession-requestanimationframe
fn RequestAnimationFrame(&self, callback: Rc<XRFrameRequestCallback>) -> i32 {
#[derive(serde::Serialize, serde::Deserialize)]
pub struct FrameCallback {
sender: IpcSender<(f64, Frame)>,
}
#[typetag::serde]
impl webxr_api::FrameRequestCallback for FrameCallback {
fn callback(&mut self, time: f64, frame: Frame) {
let _ = self.sender.send((time, frame));
}
}
// queue up RAF callback, obtain ID
let raf_id = self.next_raf_id.get();
self.next_raf_id.set(raf_id + 1);
@ -334,9 +306,7 @@ impl XRSessionMethods for XRSession {
let sender = self.raf_sender.borrow().clone().unwrap();
// request animation frame
self.session
.borrow_mut()
.request_animation_frame(FrameCallback { sender });
self.session.borrow_mut().request_animation_frame(sender);
raf_id
}