diff --git a/Cargo.lock b/Cargo.lock index fbed88c..54ab2f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,6 +31,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + [[package]] name = "android-activity" version = "0.6.1" @@ -636,6 +645,15 @@ dependencies = [ "libc", ] +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + [[package]] name = "memchr" version = "2.8.0" @@ -1121,6 +1139,23 @@ dependencies = [ "bitflags 2.11.1", ] +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + [[package]] name = "renderer" version = "0.1.0" @@ -1498,10 +1533,14 @@ version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ + "matchers", "nu-ansi-term", + "once_cell", + "regex-automata", "sharded-slab", "smallvec", "thread_local", + "tracing", "tracing-core", "tracing-log", ] diff --git a/crates/client/Cargo.toml b/crates/client/Cargo.toml index 2c1d315..9a668ed 100644 --- a/crates/client/Cargo.toml +++ b/crates/client/Cargo.toml @@ -6,7 +6,7 @@ edition = "2024" [dependencies] anyhow = "1.0.102" tracing = "0.1.44" -tracing-subscriber = "0.3.23" +tracing-subscriber = { version = "0.3.23", features = ["env-filter"] } winit = "0.30.13" renderer = { path = "../renderer" } raw-window-handle = "0.6.2" diff --git a/crates/client/src/main.rs b/crates/client/src/main.rs index f1e8508..f0d7cf5 100644 --- a/crates/client/src/main.rs +++ b/crates/client/src/main.rs @@ -53,8 +53,10 @@ impl ApplicationHandler for App { if let Some(renderer) = self.renderer.as_mut() { renderer.draw_frame().expect("Failed to draw frame"); } - - self.window.as_ref().unwrap().request_redraw(); + + if let Some(window) = self.window.as_ref() { + window.request_redraw(); + } } _ => (), } @@ -62,7 +64,9 @@ impl ApplicationHandler for App { } fn main() -> Result<()> { - tracing_subscriber::fmt().init(); + tracing_subscriber::fmt() + .with_env_filter(tracing_subscriber::EnvFilter::from_default_env()) + .init(); info!("Starting Project Catalyst client"); let event_loop = EventLoop::new().context("Failed to create event loop")?; diff --git a/crates/renderer/src/renderer.rs b/crates/renderer/src/renderer.rs index 50031d4..764ac21 100644 --- a/crates/renderer/src/renderer.rs +++ b/crates/renderer/src/renderer.rs @@ -51,14 +51,6 @@ impl Renderer { )? }; - // If the acquired image is still being used by a previous frame, wait for it - let image_fence = self.sync.images_in_flight[image_index as usize]; - if image_fence != vk::Fence::null() { - unsafe { self.device.wait_for_fences(&[image_fence], true, u64::MAX)? }; - } - // Mark the image as being in use by the current frame's fence - self.sync.images_in_flight[image_index as usize] = in_flight_fence; - // Use the semaphore tied to this specific swapchain image for rendering completion let render_finished_semaphore = self.sync.render_finished[image_index as usize]; diff --git a/crates/renderer/src/swapchain.rs b/crates/renderer/src/swapchain.rs index 68046eb..004ffec 100644 --- a/crates/renderer/src/swapchain.rs +++ b/crates/renderer/src/swapchain.rs @@ -17,7 +17,7 @@ pub fn create_swapchain( let surface_formats = unsafe { surface_loader.get_physical_device_surface_formats(physical_device, surface)? }; - let surface_present_modes = unsafe { + let _surface_present_modes = unsafe { surface_loader.get_physical_device_surface_present_modes(physical_device, surface)? }; @@ -25,10 +25,7 @@ pub fn create_swapchain( .find(|f| f.format == vk::Format::B8G8R8A8_SRGB && f.color_space == vk::ColorSpaceKHR::SRGB_NONLINEAR) .unwrap_or(&surface_formats[0]); - let present_mode = surface_present_modes.iter() - .copied() - .find(|&m| m == vk::PresentModeKHR::MAILBOX) - .unwrap_or(vk::PresentModeKHR::FIFO); + let present_mode = vk::PresentModeKHR::FIFO; let extent = if surface_capabilities.current_extent.width != u32::MAX { surface_capabilities.current_extent diff --git a/crates/renderer/src/sync.rs b/crates/renderer/src/sync.rs index 775e98f..1f43362 100644 --- a/crates/renderer/src/sync.rs +++ b/crates/renderer/src/sync.rs @@ -6,7 +6,6 @@ pub struct SyncPrimitives { pub image_available: Vec, pub render_finished: Vec, pub in_flight: Vec, - pub images_in_flight: Vec, } /// Creates all synchronization primitives for the given number of frames and images. @@ -32,13 +31,10 @@ pub fn create_sync_primitives( render_finished.push(unsafe { device.create_semaphore(&semaphore_info, None)? }); } - let images_in_flight = vec![vk::Fence::null(); image_count]; - Ok(SyncPrimitives { image_available, render_finished, in_flight, - images_in_flight, }) }