Skip to content
This repository was archived by the owner on Feb 16, 2025. It is now read-only.

The headless test device shouldn't ignore the sync object #14

Merged
merged 1 commit into from
Jul 11, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 22 additions & 3 deletions webxr/headless/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<dyn Gl>,
}

struct HeadlessDiscovery {
gl: Rc<dyn Gl>,
init: MockDeviceInit,
receiver: Option<Receiver<MockDeviceMsg>>,
}

struct HeadlessDevice {
gl: Rc<dyn Gl>,
floor_transform: TypedRigidTransform3D<f32, Native, Floor>,
viewer_origin: TypedRigidTransform3D<f32, Viewer, Native>,
views: Views,
Expand All @@ -46,6 +54,7 @@ impl MockDiscovery for HeadlessMockDiscovery {
receiver: Receiver<MockDeviceMsg>,
) -> Result<Box<dyn Discovery>, Error> {
Ok(Box::new(HeadlessDiscovery {
gl: self.gl.clone(),
init,
receiver: Some(receiver),
}))
Expand All @@ -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,
Expand Down Expand Up @@ -96,13 +107,21 @@ impl Device for HeadlessDevice {
}
}

fn render_animation_frame(&mut self, _: GLuint, _: Size2D<i32>, _: GLsync) {}
fn render_animation_frame(&mut self, _: GLuint, _: Size2D<i32>, sync: GLsync) {
self.gl.wait_sync(sync, 0, gl::TIMEOUT_IGNORED);
}

fn initial_inputs(&self) -> Vec<InputSource> {
vec![]
}
}

impl HeadlessMockDiscovery {
pub fn new(gl: Rc<dyn Gl>) -> HeadlessMockDiscovery {
HeadlessMockDiscovery { gl }
}
}

impl HeadlessDevice {
fn handle_msg(&mut self, msg: MockDeviceMsg) {
match msg {
Expand Down