From 234e2ab78deec70a9b888e2e36ab5c3c4e3f6ab0 Mon Sep 17 00:00:00 2001 From: zack Date: Sat, 29 Mar 2025 12:35:32 -0400 Subject: [PATCH] Add command parsing --- Cargo.lock | 121 +++++++++++++++++++++++++++++++++++++ crates/engine/Cargo.toml | 1 + crates/engine/src/main.rs | 59 ++++++++++-------- crates/renderer/src/lib.rs | 4 -- 4 files changed, 157 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ef2e401..7297667 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -58,6 +58,56 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +dependencies = [ + "anstyle", + "once_cell", + "windows-sys 0.59.0", +] + [[package]] name = "anyhow" version = "1.0.97" @@ -228,6 +278,46 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "clap" +version = "4.5.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e958897981290da2a852763fe9cdb89cd36977a5d729023127095fa94d95e2ff" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83b0f35019843db2160b5bb19ae09b4e6411ac33fc6a712003c33e03090e2489" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + [[package]] name = "cmake" version = "0.1.54" @@ -267,6 +357,12 @@ dependencies = [ "objc", ] +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + [[package]] name = "combine" version = "4.6.7" @@ -413,6 +509,7 @@ version = "0.1.0" dependencies = [ "ash", "ash-window", + "clap", "egui", "gfx_hal", "raw-window-handle", @@ -551,6 +648,12 @@ version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.4.0" @@ -567,6 +670,12 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itoa" version = "1.0.14" @@ -1410,6 +1519,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "syn" version = "2.0.100" @@ -1601,6 +1716,12 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "valuable" version = "0.1.1" diff --git a/crates/engine/Cargo.toml b/crates/engine/Cargo.toml index e1eee25..84a72bc 100644 --- a/crates/engine/Cargo.toml +++ b/crates/engine/Cargo.toml @@ -16,3 +16,4 @@ thiserror.workspace = true gfx_hal = { path = "../gfx_hal" } renderer = { path = "../renderer" } resource_manager = { path = "../resource_manager" } +clap = { version = "4.5.34", features = ["derive"] } diff --git a/crates/engine/src/main.rs b/crates/engine/src/main.rs index 0e3a3fe..ff90adb 100644 --- a/crates/engine/src/main.rs +++ b/crates/engine/src/main.rs @@ -7,20 +7,21 @@ use std::{ }; use ash::vk; +use clap::Parser; use gfx_hal::{ device::Device, error::GfxHalError, instance::Instance, instance::InstanceConfig, physical_device::PhysicalDevice, queue::Queue, surface::Surface, }; -use raw_window_handle::{HasDisplayHandle, HasRawDisplayHandle}; +use raw_window_handle::HasDisplayHandle; use renderer::{Renderer, RendererError}; use resource_manager::{ResourceManager, ResourceManagerError}; use tracing::{debug, error, info, warn}; use tracing_subscriber::{filter, layer::SubscriberExt, util::SubscriberInitExt, Layer}; use winit::{ application::ApplicationHandler, - event::{Event, WindowEvent}, + event::WindowEvent, event_loop::{ActiveEventLoop, EventLoop}, - window::{Window, WindowAttributes}, + window::Window, }; // --- Configuration --- const APP_NAME: &str = "BeginDisregard"; @@ -39,23 +40,19 @@ enum AppError { Renderer(#[from] RendererError), #[error("Suitable physical device not found")] NoSuitableDevice, - #[error("Required queue family not found")] - NoSuitableQueueFamily, #[error("Failed to create CString: {0}")] NulError(#[from] std::ffi::NulError), - #[error("Missing required Vulkan extension: {0}")] - MissingExtension(String), } struct Application { _instance: Arc, // Keep instance alive _physical_device: PhysicalDevice, // Keep info, though Device holds handle - device: Arc, + _device: Arc, _graphics_queue: Arc, _surface: Arc, // Resource Management - resource_manager: Arc, + _resource_manager: Arc, // Renderer renderer: Renderer, @@ -266,10 +263,10 @@ impl Application { Ok(Self { _instance: instance, _physical_device: physical_device, - device, + _device: device, _graphics_queue: graphics_queue, _surface: surface, - resource_manager, + _resource_manager: resource_manager, renderer, window, frame_count: 0, @@ -442,29 +439,43 @@ fn find_suitable_device_and_queues( } } +/// Game Engine +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +struct Args { + /// Whether or not to create debug log (default false) + #[arg(short, long, default_value_t = false)] + debug_log: bool, +} + // --- Entry Point --- fn main() -> Result<(), Box> { + let args = Args::parse(); + let fmt_layer = tracing_subscriber::fmt::layer() .with_ansi(true) .with_file(false) .with_line_number(false) .with_filter(filter::LevelFilter::DEBUG); - let log_file = OpenOptions::new() - .append(true) - .create(true) - .open("log-debug.log")?; + let registry = tracing_subscriber::registry().with(fmt_layer); - let json_layer = tracing_subscriber::fmt::layer() - .with_ansi(false) - .without_time() - .with_writer(log_file) - .with_filter(filter::LevelFilter::DEBUG); + if args.debug_log { + let log_file = OpenOptions::new() + .append(true) + .create(true) + .open("log-debug.log")?; - tracing_subscriber::registry() - .with(fmt_layer) - .with(json_layer) - .init(); + let json_layer = tracing_subscriber::fmt::layer() + .with_ansi(false) + .without_time() + .with_writer(log_file) + .with_filter(filter::LevelFilter::DEBUG); + + registry.with(json_layer).init(); + } else { + registry.init(); + } // --- Winit Setup --- let event_loop = EventLoop::new()?; diff --git a/crates/renderer/src/lib.rs b/crates/renderer/src/lib.rs index 909d415..279df1b 100644 --- a/crates/renderer/src/lib.rs +++ b/crates/renderer/src/lib.rs @@ -465,10 +465,6 @@ impl Renderer { self.depth_image_handle = new_depth_handle; self.depth_image_view = new_depth_view; - // 4. Update Egui Renderer (if necessary, depends on its implementation) - // It might need the new extent or recreate internal resources. - // Assuming it handles extent changes via update_screen_descriptor called earlier. - info!( "Swapchain recreated successfully ({}x{}).", new_extent.width, new_extent.height