fix: stereokit not exiting on ctrl+c

This commit is contained in:
Nova
2024-06-09 19:40:32 -04:00
parent 69311125ba
commit 04535895e8
3 changed files with 51 additions and 778 deletions

729
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -89,7 +89,8 @@ features = [
optional = true
[dependencies.stereokit-rust]
git = "https://github.com/mvvvv/StereoKit-rust.git"
git = "https://github.com/technobaboo/StereoKit-rust.git"
default-features = false
[dependencies.console-subscriber]
version = "0.2.0"

View File

@@ -29,7 +29,7 @@ use std::time::Duration;
use stereokit_rust::material::Material;
use stereokit_rust::shader::Shader;
use stereokit_rust::sk::{
sk_quit, AppMode, DepthMode, DisplayBlend, DisplayMode, QuitReason, SkClosures, SkSettings,
sk_quit, AppMode, DepthMode, DisplayBlend, DisplayMode, QuitReason, SkSettings,
};
use stereokit_rust::system::{Handed, LogLevel, Renderer, World};
use stereokit_rust::tex::{SHCubemap, Tex, TexFormat, TexType};
@@ -71,13 +71,6 @@ struct EventLoopInfo {
}
fn main() {
ctrlc::set_handler(|| {
if atty::isnt(atty::Stream::Stdout) {
STOP_NOTIFIER.notify_waiters()
}
})
.unwrap();
let registry = tracing_subscriber::registry();
#[cfg(feature = "profile_app")]
@@ -101,7 +94,7 @@ fn main() {
}
let cli_args = Arc::new(CliArgs::parse());
let (sk, sk_event_loop) = SkSettings::default()
let sk = SkSettings::default()
.app_name("Stardust XR")
.mode(if cli_args.flatscreen {
AppMode::Simulator
@@ -209,57 +202,51 @@ fn main() {
let mut last_frame_delta = Duration::ZERO;
let mut sleep_duration = Duration::ZERO;
debug_span!("StereoKit").in_scope(|| {
SkClosures::run_app(
sk,
sk_event_loop,
|sk, token| {
let _span = debug_span!("StereoKit step");
let _span = _span.enter();
while let Some(token) = sk.step() {
let _span = debug_span!("StereoKit step");
let _span = _span.enter();
hmd::frame();
camera::update(token);
#[cfg(feature = "wayland")]
wayland.frame_event();
destroy_queue::clear();
hmd::frame();
camera::update(token);
#[cfg(feature = "wayland")]
wayland.frame_event();
destroy_queue::clear();
if let Some(mouse_pointer) = &mut mouse_pointer {
mouse_pointer.update();
}
if let Some((left_hand, right_hand)) = &mut hands {
left_hand.update(sk, token);
right_hand.update(sk, token);
}
if let Some((left_controller, right_controller)) = &mut controllers {
left_controller.update(token);
right_controller.update(token);
}
if let Some(eye_pointer) = &eye_pointer {
eye_pointer.update();
}
if let Some(play_space) = &play_space {
play_space.update();
}
input::process_input();
nodes::root::Root::send_frame_events(Time::get_step_unscaled());
adaptive_sleep(
&mut last_frame_delta,
&mut sleep_duration,
Duration::from_micros(250),
);
if let Some(mouse_pointer) = &mut mouse_pointer {
mouse_pointer.update();
}
if let Some((left_hand, right_hand)) = &mut hands {
left_hand.update(&sk, token);
right_hand.update(&sk, token);
}
if let Some((left_controller, right_controller)) = &mut controllers {
left_controller.update(token);
right_controller.update(token);
}
if let Some(eye_pointer) = &eye_pointer {
eye_pointer.update();
}
if let Some(play_space) = &play_space {
play_space.update();
}
input::process_input();
nodes::root::Root::send_frame_events(Time::get_step_unscaled());
adaptive_sleep(
&mut last_frame_delta,
&mut sleep_duration,
Duration::from_micros(250),
);
#[cfg(feature = "wayland")]
wayland.update();
drawable::draw(token);
audio::update();
#[cfg(feature = "wayland")]
wayland.make_context_current();
},
|_sk| {
info!("Cleanly shut down StereoKit");
},
)
#[cfg(feature = "wayland")]
wayland.update();
drawable::draw(token);
audio::update();
#[cfg(feature = "wayland")]
wayland.make_context_current();
}
});
info!("Cleanly shut down StereoKit");
#[cfg(feature = "wayland")]
drop(wayland);