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 optional = true
[dependencies.stereokit-rust] [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] [dependencies.console-subscriber]
version = "0.2.0" version = "0.2.0"

View File

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