diff --git a/engine/Cargo.toml b/engine/Cargo.toml index b5bc16e..d9f748d 100644 --- a/engine/Cargo.toml +++ b/engine/Cargo.toml @@ -4,6 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] +anyhow = "1.0.93" chrono = "0.4.38" colored = "2.1.0" lazy_static = "1.5.0" @@ -14,3 +15,5 @@ reedline = "0.37.0" regex = "1.11.1" thiserror = "2.0.3" tokio = { version = "1.41.1", features = ["macros", "rt", "rt-multi-thread"] } +wgpu = "23.0.1" +winit = "0.30.5" diff --git a/engine/src/core/mod.rs b/engine/src/core/mod.rs index 7c5620e..deea4b7 100644 --- a/engine/src/core/mod.rs +++ b/engine/src/core/mod.rs @@ -1,3 +1,16 @@ pub mod commands; pub mod repl; pub mod splash; +pub mod renderer; +use anyhow::Result; +use renderer::App; +use winit::event_loop::{ControlFlow, EventLoop}; + + + +pub fn init_render() -> Result<()> { + let event_loop = EventLoop::new().unwrap(); + event_loop.set_control_flow(ControlFlow::Poll); + let mut app = App::default(); + Ok(event_loop.run_app(&mut app)?) +} \ No newline at end of file diff --git a/engine/src/core/renderer/mod.rs b/engine/src/core/renderer/mod.rs new file mode 100644 index 0000000..791f600 --- /dev/null +++ b/engine/src/core/renderer/mod.rs @@ -0,0 +1,43 @@ +use log2::{debug, error}; +use winit::application::ApplicationHandler; +use winit::event::WindowEvent; +use winit::event_loop::ActiveEventLoop; +use winit::window::{Window, WindowId}; + +#[derive(Default)] +pub struct App { + window: Option, +} + +impl ApplicationHandler for App { + fn resumed(&mut self, event_loop: &ActiveEventLoop) { + if self.window.is_none() { + let win_attr = Window::default_attributes().with_title("Zenyx"); + let window = event_loop + .create_window(win_attr) + .expect("create window err."); + self.window = Some(window); + } + } + + fn window_event( + &mut self, + event_loop: &ActiveEventLoop, + _window_id: WindowId, + event: WindowEvent, + ) { + match event { + WindowEvent::CloseRequested => { + event_loop.exit(); + debug!("Window closed, exiting"); + std::process::exit(0) + } + WindowEvent::Resized(size) => { + let size_str: String = size.height.to_string() + "x" + &size.width.to_string(); + //self.window.as_ref().unwrap().set_title(&format!("you reszed the window to {size_str}")); + debug!("Window resized to {:?}", size_str); + } + _ => error!("Unhandled window event"), + } + } +} \ No newline at end of file diff --git a/engine/src/main.rs b/engine/src/main.rs index b94b1eb..c5e5729 100644 --- a/engine/src/main.rs +++ b/engine/src/main.rs @@ -1,11 +1,11 @@ -use std::io; +use anyhow::Result; use log2::info; pub mod core; #[tokio::main] -async fn main() -> Result<(), io::Error> { +async fn main() -> Result<()> { let _log2 = log2::open("z.log").tee(true).level("trace").start(); info!("Initalizing Engine"); let shell_thread = tokio::task::spawn(async { @@ -16,6 +16,7 @@ async fn main() -> Result<(), io::Error> { core::splash::print_splash(); info!("Engine Initalized"); + core::init_render()?; shell_thread.await?; Ok(()) }