Add vulkan creation from resources

This commit is contained in:
Florian RICHER 2025-04-13 18:45:33 +02:00
parent 4f6216635f
commit e2616a0ef5
Signed by: florian.richer
GPG key ID: C73D37CBED7BFC77
8 changed files with 281 additions and 13 deletions

View file

@ -1,23 +1,44 @@
use config::WindowConfig;
use raw_handle::{DisplayHandleWrapper, EventLoopProxyWrapper};
use state::WindowState;
use winit::event_loop::EventLoop;
use super::app::{App, AppExit};
pub mod config;
pub mod raw_handle;
pub mod state;
pub fn init(app: &mut App, window_config: WindowConfig) {
let world = app.world_mut();
world.insert_resource(window_config);
let mut event_loop_builder = EventLoop::with_user_event();
let event_loop = event_loop_builder.build().unwrap();
app.set_runner(Box::new(move |app| runner(app, event_loop)));
#[derive(Debug, thiserror::Error)]
pub enum WindowError {
#[error("Failed to create event loop")]
FailedToCreateEventLoop,
}
fn runner(app: App, event_loop: EventLoop<()>) -> AppExit {
pub struct Window;
impl Window {
pub fn new(app: &mut App, window_config: WindowConfig) -> Result<(), WindowError> {
let world = app.world_mut();
world.insert_resource(window_config);
let mut event_loop_builder = EventLoop::with_user_event();
let event_loop = event_loop_builder
.build()
.map_err(|_| WindowError::FailedToCreateEventLoop)?;
world.insert_resource(DisplayHandleWrapper(event_loop.owned_display_handle()));
app.set_runner(Box::new(move |app| runner(app, event_loop)));
Ok(())
}
}
fn runner(mut app: App, event_loop: EventLoop<()>) -> AppExit {
app.world_mut()
.insert_resource(EventLoopProxyWrapper::new(event_loop.create_proxy()));
let mut window_state = WindowState::new(app);
match event_loop.run_app(&mut window_state) {