diff options
Diffstat (limited to 'client/src/window.rs')
-rw-r--r-- | client/src/window.rs | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/client/src/window.rs b/client/src/window.rs index f003574..d0296e7 100644 --- a/client/src/window.rs +++ b/client/src/window.rs @@ -1,3 +1,4 @@ +use crate::renderer::Renderer; use winit::{ application::ApplicationHandler, event::WindowEvent, @@ -6,7 +7,7 @@ use winit::{ }; pub struct WindowState { - window: Option<Window>, + window: Option<(Window, Renderer<'static>)>, } impl WindowState { @@ -16,11 +17,11 @@ impl WindowState { } impl ApplicationHandler for WindowState { fn resumed(&mut self, event_loop: &ActiveEventLoop) { - self.window = Some( - event_loop - .create_window(WindowAttributes::default().with_maximized(true)) - .unwrap(), - ) + let window = event_loop + .create_window(WindowAttributes::default().with_maximized(true)) + .unwrap(); + let renderer = Renderer::new(unsafe { std::mem::transmute(&window) }); + self.window = Some((window, renderer)) } fn window_event( @@ -29,7 +30,7 @@ impl ApplicationHandler for WindowState { window_id: WindowId, event: WindowEvent, ) { - if let Some(win) = &self.window { + if let Some((win, ren)) = &self.window { match event { WindowEvent::RedrawRequested => {} _ => (), @@ -37,3 +38,12 @@ impl ApplicationHandler for WindowState { } } } + +impl Drop for WindowState { + fn drop(&mut self) { + if let Some((win, ren)) = self.window.take() { + drop(ren); + drop(win); + } + } +} |