Improve error handling

This commit is contained in:
Hanno Braun 2024-10-30 02:30:51 +01:00
parent 8e2ec045c3
commit ab4a2f6f40
2 changed files with 9 additions and 9 deletions

View File

@ -32,7 +32,7 @@ impl ApplicationHandler for App {
.unwrap(), .unwrap(),
); );
let renderer = Renderer::new(window.clone()); let renderer = Renderer::new(window.clone()).unwrap();
self.window = Some(window); self.window = Some(window);
self.renderer = Some(renderer); self.renderer = Some(renderer);

View File

@ -1,5 +1,6 @@
use std::sync::Arc; use std::sync::Arc;
use anyhow::anyhow;
use winit::window::Window; use winit::window::Window;
pub struct Renderer { pub struct Renderer {
@ -9,31 +10,30 @@ pub struct Renderer {
} }
impl Renderer { impl Renderer {
pub fn new(window: Arc<Window>) -> Self { pub fn new(window: Arc<Window>) -> anyhow::Result<Self> {
let instance = wgpu::Instance::default(); let instance = wgpu::Instance::default();
let surface = instance.create_surface(window.clone()).unwrap(); let surface = instance.create_surface(window.clone())?;
let adapter = pollster::block_on(instance.request_adapter( let adapter = pollster::block_on(instance.request_adapter(
&wgpu::RequestAdapterOptions { &wgpu::RequestAdapterOptions {
compatible_surface: Some(&surface), compatible_surface: Some(&surface),
..Default::default() ..Default::default()
}, },
)) ))
.unwrap(); .ok_or_else(|| anyhow!("Failed to request adapter"))?;
let (device, queue) = pollster::block_on( let (device, queue) = pollster::block_on(
adapter.request_device(&wgpu::DeviceDescriptor::default(), None), adapter.request_device(&wgpu::DeviceDescriptor::default(), None),
) )?;
.unwrap();
let size = window.inner_size(); let size = window.inner_size();
let config = surface let config = surface
.get_default_config(&adapter, size.width, size.height) .get_default_config(&adapter, size.width, size.height)
.unwrap(); .ok_or_else(|| anyhow!("Failed to get default surface config"))?;
surface.configure(&device, &config); surface.configure(&device, &config);
Self { Ok(Self {
surface, surface,
device, device,
queue, queue,
} })
} }
} }