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

Commit 952a666

Browse files
authored
Merge pull request #14 from asajeffrey/headless-gl-sync
The headless test device shouldn't ignore the sync object
2 parents 2209fed + 0574860 commit 952a666

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

webxr/headless/mod.rs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,25 @@ use webxr_api::Views;
2222
use euclid::Size2D;
2323
use euclid::TypedRigidTransform3D;
2424

25+
use gleam::gl;
2526
use gleam::gl::GLsync;
2627
use gleam::gl::GLuint;
28+
use gleam::gl::Gl;
2729

28-
pub struct HeadlessMockDiscovery;
30+
use std::rc::Rc;
31+
32+
pub struct HeadlessMockDiscovery {
33+
gl: Rc<dyn Gl>,
34+
}
2935

3036
struct HeadlessDiscovery {
37+
gl: Rc<dyn Gl>,
3138
init: MockDeviceInit,
3239
receiver: Option<Receiver<MockDeviceMsg>>,
3340
}
3441

3542
struct HeadlessDevice {
43+
gl: Rc<dyn Gl>,
3644
floor_transform: TypedRigidTransform3D<f32, Native, Floor>,
3745
viewer_origin: TypedRigidTransform3D<f32, Viewer, Native>,
3846
views: Views,
@@ -46,6 +54,7 @@ impl MockDiscovery for HeadlessMockDiscovery {
4654
receiver: Receiver<MockDeviceMsg>,
4755
) -> Result<Box<dyn Discovery>, Error> {
4856
Ok(Box::new(HeadlessDiscovery {
57+
gl: self.gl.clone(),
4958
init,
5059
receiver: Some(receiver),
5160
}))
@@ -57,12 +66,14 @@ impl Discovery for HeadlessDiscovery {
5766
if !self.supports_session(mode) {
5867
return Err(Error::NoMatchingDevice);
5968
}
69+
let gl = self.gl.clone();
6070
let receiver = self.receiver.take().ok_or(Error::NoMatchingDevice)?;
6171
let viewer_origin = self.init.viewer_origin.clone();
6272
let floor_transform = self.init.floor_origin.inverse();
6373
let views = self.init.views.clone();
64-
xr.spawn(move || {
74+
xr.run_on_main_thread(move || {
6575
Ok(HeadlessDevice {
76+
gl,
6677
floor_transform,
6778
viewer_origin,
6879
views,
@@ -96,13 +107,21 @@ impl Device for HeadlessDevice {
96107
}
97108
}
98109

99-
fn render_animation_frame(&mut self, _: GLuint, _: Size2D<i32>, _: GLsync) {}
110+
fn render_animation_frame(&mut self, _: GLuint, _: Size2D<i32>, sync: GLsync) {
111+
self.gl.wait_sync(sync, 0, gl::TIMEOUT_IGNORED);
112+
}
100113

101114
fn initial_inputs(&self) -> Vec<InputSource> {
102115
vec![]
103116
}
104117
}
105118

119+
impl HeadlessMockDiscovery {
120+
pub fn new(gl: Rc<dyn Gl>) -> HeadlessMockDiscovery {
121+
HeadlessMockDiscovery { gl }
122+
}
123+
}
124+
106125
impl HeadlessDevice {
107126
fn handle_msg(&mut self, msg: MockDeviceMsg) {
108127
match msg {

0 commit comments

Comments
 (0)