rust_vulkan_test/src/display/app.rs
Florian RICHER fb4ac29c07
Some checks failed
Build legacy Nix package on Ubuntu / build (push) Failing after 0s
Add a lot of thing
2024-11-15 13:59:19 +01:00

62 lines
2.1 KiB
Rust

use crate::display::window::Window;
use crate::vulkan::VkRenderContext;
use winit::application::ApplicationHandler;
use winit::event::WindowEvent;
use winit::event_loop::ActiveEventLoop;
use winit::window::WindowId;
pub struct App {
window: Window,
render_context: Option<VkRenderContext>,
}
impl App {
pub fn new(window: Window) -> Self {
Self {
window,
render_context: None,
}
}
}
impl ApplicationHandler for App {
fn resumed(&mut self, event_loop: &ActiveEventLoop) {
self.window.create_window(event_loop)
.map_err(|err| format!("Failed to create window: {}", err))
.unwrap();
self.render_context = VkRenderContext::init(&self.window).ok();
}
fn window_event(&mut self, event_loop: &ActiveEventLoop, id: WindowId, event: WindowEvent) {
match event {
WindowEvent::CloseRequested => {
log::debug!("The close button was pressed; stopping");
event_loop.exit();
}
WindowEvent::Resized(size) => {
match self.render_context.as_mut() {
Some(render_context) => {
if let Err(error) = render_context.update_resolution(size.width, size.height) {
log::error!("Failed to update resolution of render context : {}", error);
}
}
None => log::warn!("Window resized but no render context found")
};
}
WindowEvent::RedrawRequested => {
match self.render_context.as_mut() {
Some(render_context) => {
if let Err(error) = render_context.render() {
log::error!("Failed to render with render context : {}", error);
}
}
None => log::warn!("Window resized but no render context found")
};
self.window.request_redraw();
}
_ => {}
}
}
}