diff --git a/experiments/2024-10-30/src/app.rs b/experiments/2024-10-30/src/app.rs index 01016ee18..4876393a6 100644 --- a/experiments/2024-10-30/src/app.rs +++ b/experiments/2024-10-30/src/app.rs @@ -32,31 +32,7 @@ impl ApplicationHandler for App { .unwrap(), ); - let instance = wgpu::Instance::default(); - let surface = instance.create_surface(window.clone()).unwrap(); - let adapter = pollster::block_on(instance.request_adapter( - &wgpu::RequestAdapterOptions { - compatible_surface: Some(&surface), - ..Default::default() - }, - )) - .unwrap(); - let (device, queue) = pollster::block_on( - adapter.request_device(&wgpu::DeviceDescriptor::default(), None), - ) - .unwrap(); - - let size = window.inner_size(); - let config = surface - .get_default_config(&adapter, size.width, size.height) - .unwrap(); - surface.configure(&device, &config); - - let renderer = Renderer { - surface, - device, - queue, - }; + let renderer = Renderer::new(window.clone()); self.window = Some(window); self.renderer = Some(renderer); diff --git a/experiments/2024-10-30/src/render.rs b/experiments/2024-10-30/src/render.rs index 4d11891aa..a231b859c 100644 --- a/experiments/2024-10-30/src/render.rs +++ b/experiments/2024-10-30/src/render.rs @@ -1,5 +1,39 @@ +use std::sync::Arc; + +use winit::window::Window; + pub struct Renderer { pub surface: wgpu::Surface<'static>, pub device: wgpu::Device, pub queue: wgpu::Queue, } + +impl Renderer { + pub fn new(window: Arc) -> Self { + let instance = wgpu::Instance::default(); + let surface = instance.create_surface(window.clone()).unwrap(); + let adapter = pollster::block_on(instance.request_adapter( + &wgpu::RequestAdapterOptions { + compatible_surface: Some(&surface), + ..Default::default() + }, + )) + .unwrap(); + let (device, queue) = pollster::block_on( + adapter.request_device(&wgpu::DeviceDescriptor::default(), None), + ) + .unwrap(); + + let size = window.inner_size(); + let config = surface + .get_default_config(&adapter, size.width, size.height) + .unwrap(); + surface.configure(&device, &config); + + Self { + surface, + device, + queue, + } + } +}