Add command parsing

This commit is contained in:
zack 2025-03-29 12:35:32 -04:00
parent 12b20be584
commit 234e2ab78d
No known key found for this signature in database
GPG key ID: EE8A2B709E2401D1
4 changed files with 157 additions and 28 deletions

View file

@ -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"] }

View file

@ -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<Instance>, // Keep instance alive
_physical_device: PhysicalDevice, // Keep info, though Device holds handle
device: Arc<Device>,
_device: Arc<Device>,
_graphics_queue: Arc<Queue>,
_surface: Arc<Surface>,
// Resource Management
resource_manager: Arc<ResourceManager>,
_resource_manager: Arc<ResourceManager>,
// 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<dyn Error>> {
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()?;

View file

@ -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