From 0574860bbf0210aeaeab0026b7c8620ba4bdf65f Mon Sep 17 00:00:00 2001 From: Alan Jeffrey Date: Thu, 11 Jul 2019 11:06:14 -0500 Subject: [PATCH] The headless test device shouldn't ignore the sync object --- webxr/headless/mod.rs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/webxr/headless/mod.rs b/webxr/headless/mod.rs index 8e98899f..f408c20c 100644 --- a/webxr/headless/mod.rs +++ b/webxr/headless/mod.rs @@ -22,17 +22,25 @@ use webxr_api::Views; use euclid::Size2D; use euclid::TypedRigidTransform3D; +use gleam::gl; use gleam::gl::GLsync; use gleam::gl::GLuint; +use gleam::gl::Gl; -pub struct HeadlessMockDiscovery; +use std::rc::Rc; + +pub struct HeadlessMockDiscovery { + gl: Rc, +} struct HeadlessDiscovery { + gl: Rc, init: MockDeviceInit, receiver: Option>, } struct HeadlessDevice { + gl: Rc, floor_transform: TypedRigidTransform3D, viewer_origin: TypedRigidTransform3D, views: Views, @@ -46,6 +54,7 @@ impl MockDiscovery for HeadlessMockDiscovery { receiver: Receiver, ) -> Result, Error> { Ok(Box::new(HeadlessDiscovery { + gl: self.gl.clone(), init, receiver: Some(receiver), })) @@ -57,12 +66,14 @@ impl Discovery for HeadlessDiscovery { if !self.supports_session(mode) { return Err(Error::NoMatchingDevice); } + let gl = self.gl.clone(); let receiver = self.receiver.take().ok_or(Error::NoMatchingDevice)?; let viewer_origin = self.init.viewer_origin.clone(); let floor_transform = self.init.floor_origin.inverse(); let views = self.init.views.clone(); - xr.spawn(move || { + xr.run_on_main_thread(move || { Ok(HeadlessDevice { + gl, floor_transform, viewer_origin, views, @@ -96,13 +107,21 @@ impl Device for HeadlessDevice { } } - fn render_animation_frame(&mut self, _: GLuint, _: Size2D, _: GLsync) {} + fn render_animation_frame(&mut self, _: GLuint, _: Size2D, sync: GLsync) { + self.gl.wait_sync(sync, 0, gl::TIMEOUT_IGNORED); + } fn initial_inputs(&self) -> Vec { vec![] } } +impl HeadlessMockDiscovery { + pub fn new(gl: Rc) -> HeadlessMockDiscovery { + HeadlessMockDiscovery { gl } + } +} + impl HeadlessDevice { fn handle_msg(&mut self, msg: MockDeviceMsg) { match msg {