Add command parsing
This commit is contained in:
parent
12b20be584
commit
234e2ab78d
4 changed files with 157 additions and 28 deletions
|
|
@ -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"] }
|
||||
|
|
|
|||
|
|
@ -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()?;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue