Some checks failed
Build legacy Nix package on Ubuntu / build (push) Failing after 0s
68 lines
2.1 KiB
Rust
68 lines
2.1 KiB
Rust
use std::ffi::c_char;
|
|
use winit::event::WindowEvent;
|
|
use winit::event_loop::ActiveEventLoop;
|
|
use winit::raw_window_handle::HasDisplayHandle;
|
|
use winit::window::WindowId;
|
|
|
|
pub struct Window {
|
|
handle: Option<winit::window::Window>,
|
|
window_attributes: winit::window::WindowAttributes
|
|
}
|
|
|
|
impl Window {
|
|
pub fn new(window_attributes: winit::window::WindowAttributes) -> Self {
|
|
Self {
|
|
handle: None,
|
|
window_attributes,
|
|
}
|
|
}
|
|
|
|
pub fn create_window(&mut self, event_loop: &ActiveEventLoop) -> anyhow::Result<()> {
|
|
let window = event_loop.create_window(self.window_attributes.clone())?;
|
|
|
|
self.handle = Some(window);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub fn required_extensions(&self) -> anyhow::Result<Vec<*const c_char>> {
|
|
let display_handle = self.handle
|
|
.as_ref()
|
|
.ok_or_else(|| anyhow::anyhow!("Window not found"))?
|
|
.display_handle()?;
|
|
|
|
#[allow(unused_mut)]
|
|
let mut extension_names = ash_window::enumerate_required_extensions(display_handle.as_raw())?
|
|
.to_vec();
|
|
|
|
// TODO: Move this because is not related to Window extensions
|
|
#[cfg(any(target_os = "macos", target_os = "ios"))]
|
|
{
|
|
extension_names.push(ash::khr::portability_enumeration::NAME.as_ptr());
|
|
// Enabling this extension is a requirement when using `VK_KHR_portability_subset`
|
|
extension_names.push(ash::khr::get_physical_device_properties2::NAME.as_ptr());
|
|
}
|
|
|
|
Ok(extension_names)
|
|
}
|
|
|
|
pub fn handle(&self) -> Option<&winit::window::Window> {
|
|
self.handle.as_ref()
|
|
}
|
|
|
|
pub fn size(&self) -> Option<winit::dpi::Size> {
|
|
self.window_attributes.inner_size
|
|
}
|
|
|
|
pub fn window_event(&mut self, _event_loop: &ActiveEventLoop, _id: WindowId, event: WindowEvent) {
|
|
match event {
|
|
WindowEvent::RedrawRequested => {
|
|
match self.handle.as_ref() {
|
|
Some(window) => window.request_redraw(),
|
|
None => log::warn!("Redraw requested but no window found")
|
|
}
|
|
}
|
|
_ => (),
|
|
}
|
|
}
|
|
}
|