Winit.rs Запуск и хранение окна внутри структуры
Я изучаю vulkan + winit используя документацию Vulkan Triangle
Я стараюсь так же использовать ООП и сделал некую копию структуры с парочкой функций внутри.
use vulkano::instance::Instance;
use vulkano::instance::InstanceExtensions;
use vulkano_win::VkSurfaceBuild;
use winit::{
event::{Event, WindowEvent},
event_loop::{ControlFlow, EventLoop},
window::{
Window,
},
};
use vulkano_win::CreationError::WindowCreationError;
struct HelloTriangleApplication {
event_loop: EventLoop<()>,
window: Window,
}
impl HelloTriangleApplication {
pub fn run(&mut self){
self.init_window();
self.init_vulkan();
self.init_loop();
println!("Application started successful!");
}
fn init_window(&mut self) {
println!("Window initialization...");
self.event_loop = EventLoop::new();
self.window = Window::new(&self.event_loop)
.unwrap();
}
fn init_vulkan(&mut self) {
println!("Vulkan initialization...");
}
fn init_loop(&mut self){
println!("Loop initialization...");
self.event_loop.run(move |event, _, control_flow| {
// ControlFlow::Poll continuously runs the event loop, even if the OS hasn't
// dispatched any events. This is ideal for games and similar applications.
*control_flow = ControlFlow::Poll;
// ControlFlow::Wait pauses the event loop if no events are available to process.
// This is ideal for non-game applications that only update in response to user
// input, and uses significantly less power/CPU time than ControlFlow::Poll.
//*control_flow = ControlFlow::Wait;
match event {
Event::WindowEvent {
event: WindowEvent::CloseRequested,
..
} => {
println!("The close button was pressed; stopping");
*control_flow = ControlFlow::Exit
},
Event::MainEventsCleared => {
// Application update code.
// Queue a RedrawRequested event.
self.window.request_redraw();
},
Event::RedrawRequested(_) => {
// Redraw the application.
},
_ => ()
}
});
}
}
fn main() {
//--------------------------------------------------------------------------------------------//
//let app = HelloTriangleApplication::initialize();
let mut app = HelloTriangleApplication;
app.run();
}
При запуске я получаю ошибку: cannot infer an appropriate lifetime due to conflicting requirements struct
Если я правильно понял, проблема в том, что выполнение event_loop.run() живёт дольше, чем структура. Но для меня это абстрактная информация. Не совсем понимаю как её решить.
Объясните пожалуйста как решить проблему и удачно запустить программу?