openxr task scheduler
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
use std::{
|
use std::{
|
||||||
|
collections::VecDeque,
|
||||||
sync::{
|
sync::{
|
||||||
atomic::{AtomicBool, Ordering},
|
atomic::{AtomicBool, Ordering},
|
||||||
Arc,
|
Arc,
|
||||||
@@ -14,7 +15,7 @@ use xr::OverlaySessionCreateFlagsEXTX;
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
backend::{
|
backend::{
|
||||||
common::OverlayContainer,
|
common::{OverlayContainer, TaskType},
|
||||||
input::interact,
|
input::interact,
|
||||||
openxr::{input::DoubleClickCounter, lines::LinePool, overlay::OpenXrOverlayData},
|
openxr::{input::DoubleClickCounter, lines::LinePool, overlay::OpenXrOverlayData},
|
||||||
},
|
},
|
||||||
@@ -108,6 +109,7 @@ pub fn openxr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
|
|||||||
let mut event_storage = xr::EventDataBuffer::new();
|
let mut event_storage = xr::EventDataBuffer::new();
|
||||||
|
|
||||||
let mut show_hide_counter = DoubleClickCounter::new();
|
let mut show_hide_counter = DoubleClickCounter::new();
|
||||||
|
let mut due_tasks = VecDeque::with_capacity(4);
|
||||||
|
|
||||||
'main_loop: loop {
|
'main_loop: loop {
|
||||||
if !running.load(Ordering::Relaxed) {
|
if !running.load(Ordering::Relaxed) {
|
||||||
@@ -175,6 +177,18 @@ pub fn openxr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
|
|||||||
continue 'main_loop;
|
continue 'main_loop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
app_state.tasks.retrieve_due(&mut due_tasks);
|
||||||
|
while let Some(task) = due_tasks.pop_front() {
|
||||||
|
match task {
|
||||||
|
TaskType::Global(f) => f(&mut app_state),
|
||||||
|
TaskType::Overlay(sel, f) => {
|
||||||
|
if let Some(o) = overlays.mut_by_selector(&sel) {
|
||||||
|
f(&mut app_state, &mut o.state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
app_state.input_state.pre_update();
|
app_state.input_state.pre_update();
|
||||||
input_source.update(&xr_state, &mut app_state);
|
input_source.update(&xr_state, &mut app_state);
|
||||||
app_state.input_state.post_update();
|
app_state.input_state.post_update();
|
||||||
|
|||||||
Reference in New Issue
Block a user