openvr: throttle using WaitFrameSync
This commit is contained in:
4
Cargo.lock
generated
4
Cargo.lock
generated
@@ -2198,7 +2198,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ovr_overlay"
|
name = "ovr_overlay"
|
||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
source = "git+https://github.com/galister/ovr_overlay_oyasumi#376e817f9bf6438a486fbbfc6cf6ac2b8ff8ae36"
|
source = "git+https://github.com/galister/ovr_overlay_oyasumi#43a825d12bc86e225df5eaac8da9b3fd4880f9f1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"derive_more",
|
"derive_more",
|
||||||
@@ -2213,7 +2213,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "ovr_overlay_sys"
|
name = "ovr_overlay_sys"
|
||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
source = "git+https://github.com/galister/ovr_overlay_oyasumi#376e817f9bf6438a486fbbfc6cf6ac2b8ff8ae36"
|
source = "git+https://github.com/galister/ovr_overlay_oyasumi#43a825d12bc86e225df5eaac8da9b3fd4880f9f1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocxx",
|
"autocxx",
|
||||||
"autocxx-build",
|
"autocxx-build",
|
||||||
|
|||||||
@@ -126,7 +126,9 @@ pub fn openvr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
|
|||||||
|
|
||||||
let watch_id = overlays.get_by_name(WATCH_NAME).unwrap().state.id; // want panic
|
let watch_id = overlays.get_by_name(WATCH_NAME).unwrap().state.id; // want panic
|
||||||
|
|
||||||
let frame_time = (1000.0 / refresh_rate).floor() * 0.001;
|
// want at least half refresh rate
|
||||||
|
let frame_timeout = 2 * (1000.0 / refresh_rate).floor() as u32;
|
||||||
|
|
||||||
let mut next_device_update = Instant::now();
|
let mut next_device_update = Instant::now();
|
||||||
let mut due_tasks = VecDeque::with_capacity(4);
|
let mut due_tasks = VecDeque::with_capacity(4);
|
||||||
|
|
||||||
@@ -134,6 +136,8 @@ pub fn openvr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
|
|||||||
let pointer_lines = [lines.allocate(), lines.allocate()];
|
let pointer_lines = [lines.allocate(), lines.allocate()];
|
||||||
|
|
||||||
'main_loop: loop {
|
'main_loop: loop {
|
||||||
|
let _ = overlay_mgr.wait_frame_sync(frame_timeout);
|
||||||
|
|
||||||
if !running.load(Ordering::Relaxed) {
|
if !running.load(Ordering::Relaxed) {
|
||||||
log::warn!("Received shutdown signal.");
|
log::warn!("Received shutdown signal.");
|
||||||
break 'main_loop;
|
break 'main_loop;
|
||||||
@@ -279,15 +283,6 @@ pub fn openvr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
|
|||||||
// close font handles?
|
// close font handles?
|
||||||
|
|
||||||
state.hid_provider.on_new_frame();
|
state.hid_provider.on_new_frame();
|
||||||
|
|
||||||
let mut seconds_since_vsync = 0f32;
|
|
||||||
std::thread::sleep(Duration::from_secs_f32(
|
|
||||||
if system_mgr.get_time_since_last_vsync(&mut seconds_since_vsync, &mut 0u64) {
|
|
||||||
(frame_time - seconds_since_vsync).max(0.0)
|
|
||||||
} else {
|
|
||||||
frame_time
|
|
||||||
},
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log::warn!("OpenVR shutdown");
|
log::warn!("OpenVR shutdown");
|
||||||
|
|||||||
Reference in New Issue
Block a user