diff --git a/Cargo.lock b/Cargo.lock index 80e32ee..a86f202 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1281,6 +1281,16 @@ dependencies = [ "libc", ] +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -1556,6 +1566,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "owned_ttf_parser" version = "0.25.0" @@ -1919,6 +1935,15 @@ dependencies = [ "syn", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "shlex" version = "1.3.0" @@ -2118,6 +2143,16 @@ dependencies = [ "syn", ] +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "tiny-skia" version = "0.11.4" @@ -2222,6 +2257,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "nu-ansi-term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", ] [[package]] @@ -2295,6 +2356,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "version_check" version = "0.9.5" @@ -3131,6 +3198,7 @@ dependencies = [ "thiserror 2.0.12", "tokio", "tracing", + "tracing-subscriber", "wgpu", "winit", ] diff --git a/engine/Cargo.toml b/engine/Cargo.toml index 78db639..32e799f 100644 --- a/engine/Cargo.toml +++ b/engine/Cargo.toml @@ -24,6 +24,7 @@ bytemuck = "1.21.0" futures = "0.3.31" cgmath = "0.18.0" tracing = "0.1.41" +tracing-subscriber = "0.3.19" [profile.dev] diff --git a/engine/src/core/render/ctx.rs b/engine/src/core/render/ctx.rs index a854ebb..addd7dc 100644 --- a/engine/src/core/render/ctx.rs +++ b/engine/src/core/render/ctx.rs @@ -5,7 +5,7 @@ use std::time::Instant; use cgmath::{Matrix4, Point3, Rad, Vector3, perspective}; use futures::executor::block_on; use thiserror::Error; -use wgpu::util::DeviceExt; +use wgpu::{Backends, InstanceDescriptor, util::DeviceExt}; use winit::window::Window; #[derive(Debug, Error)] @@ -240,7 +240,10 @@ pub struct WgpuCtx<'window> { impl<'window> WgpuCtx<'window> { pub async fn new(window: Arc) -> Result, ContextError> { - let instance = wgpu::Instance::default(); + let instance = wgpu::Instance::new(&InstanceDescriptor { + backends: Backends::from_comma_list("dx12,metal,opengl,webgpu"), + ..Default::default() + }); let surface = instance.create_surface(Arc::clone(&window))?; let adapter = instance .request_adapter(&wgpu::RequestAdapterOptions { @@ -255,8 +258,7 @@ impl<'window> WgpuCtx<'window> { &wgpu::DeviceDescriptor { label: None, required_features: wgpu::Features::empty(), - required_limits: wgpu::Limits::downlevel_webgl2_defaults() - .using_resolution(adapter.limits()), + required_limits: wgpu::Limits::default().using_resolution(adapter.limits()), memory_hints: wgpu::MemoryHints::Performance, }, None, diff --git a/engine/src/core/render/mod.rs b/engine/src/core/render/mod.rs index 5bf1b7f..0eb47b8 100644 --- a/engine/src/core/render/mod.rs +++ b/engine/src/core/render/mod.rs @@ -31,7 +31,13 @@ impl ApplicationHandler for App<'_> { ); let window_id = window.id(); let wgpu_ctx = WgpuCtx::new_blocking(window.clone()).unwrap(); - self.windows.insert(window_id, WindowContext { window, ctx: wgpu_ctx }); + self.windows.insert( + window_id, + WindowContext { + window, + ctx: wgpu_ctx, + }, + ); } } @@ -45,7 +51,7 @@ impl ApplicationHandler for App<'_> { WindowEvent::CloseRequested => { if let Some(window_context) = self.windows.remove(&window_id) { drop(window_context); - println!("Window: {:?} closed, exiting", window_id); + debug!("Window: {:?} closed, exiting", window_id); } if self.windows.is_empty() { event_loop.exit(); @@ -63,10 +69,14 @@ impl ApplicationHandler for App<'_> { match code { winit::keyboard::KeyCode::Space => { debug!("Space key pressed"); - if let Some(window_context) = self.windows.values_mut().next() { + if let Some(window_context) = self.windows.get_mut(&window_id){ match window_context.ctx.bg_color() { - wgpu::Color::WHITE => window_context.ctx.change_bg_color(wgpu::Color::BLACK), - wgpu::Color::BLACK => window_context.ctx.change_bg_color(wgpu::Color::WHITE), + wgpu::Color::WHITE => { + window_context.ctx.change_bg_color(wgpu::Color::BLACK) + } + wgpu::Color::BLACK => { + window_context.ctx.change_bg_color(wgpu::Color::WHITE) + } _ => window_context.ctx.change_bg_color(wgpu::Color::WHITE), } } @@ -82,7 +92,13 @@ impl ApplicationHandler for App<'_> { ); let window_id = new_window.id(); let wgpu_ctx = WgpuCtx::new_blocking(new_window.clone()).unwrap(); - self.windows.insert(window_id, WindowContext { window: new_window, ctx: wgpu_ctx }); + self.windows.insert( + window_id, + WindowContext { + window: new_window, + ctx: wgpu_ctx, + }, + ); } _ => info!("Unimplemented keycode: {:?}", code), } @@ -99,8 +115,7 @@ impl ApplicationHandler for App<'_> { if let Some(window_context) = self.windows.get_mut(&window_id) { window_context.ctx.resize(size.into()); window_context.window.request_redraw(); - let size_str: String = - size.height.to_string() + "x" + &size.width.to_string(); + let size_str: String = size.height.to_string() + "x" + &size.width.to_string(); debug!("Window resized to {:?}", size_str); } } diff --git a/engine/src/main.rs b/engine/src/main.rs index b876d76..8b0784f 100644 --- a/engine/src/main.rs +++ b/engine/src/main.rs @@ -4,18 +4,33 @@ use colored::Colorize; use tokio::runtime; #[allow(unused_imports)] use tracing::{debug, error, info, warn}; +use tracing::{level_filters::LevelFilter, subscriber::set_global_default}; +use tracing_subscriber::{layer::Filter, util::SubscriberInitExt}; use winit::event_loop::EventLoop; pub mod core; +fn init_logger() { + let subscriber = tracing_subscriber::fmt() + .with_max_level(LevelFilter::DEBUG) + .with_level(true) + .compact() + .pretty() + .log_internal_errors(false) + .without_time() + .with_thread_names(true) + .finish(); + + set_global_default(subscriber).expect("Failed to set default subscriber"); +} + #[tokio::main(flavor = "current_thread")] async fn main() -> anyhow::Result<()> { + init_logger(); if !cfg!(debug_assertions) { - println!("{}", "Debug mode disabled".bright_blue()); + info!("{}", "Debug mode disabled".bright_blue()); set_panic_hook(); } setup(); - splash::print_splash(); - info!("Type 'help' for a list of commands."); let repl_thread = std::thread::spawn(|| { let rt = runtime::Builder::new_current_thread() @@ -26,6 +41,9 @@ async fn main() -> anyhow::Result<()> { }); let event_loop = EventLoop::new().unwrap(); + splash::print_splash(); + info!("Type 'help' for a list of commands."); + core::render::init_renderer(event_loop); if let Err(_) = repl_thread.join() {