diff --git a/src/commands.rs b/src/commands.rs index 15fdddd..a388c04 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -1,4 +1,3 @@ -use super::handle::{MeshHandle, TextureHandle}; use super::scene::MeshInstance; use std::collections::HashMap; use std::ops::Range; diff --git a/src/main.rs b/src/main.rs index cf06ab6..3847bb6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,41 +39,13 @@ struct Renderer { } impl Renderer { - pub async fn new(window: &winit::window::Window) -> Self { - let size = window.inner_size(); - - let instance = wgpu::Instance::new(wgpu::Backends::all()); - let surface = unsafe { instance.create_surface(window) }; - let adapter = instance - .request_adapter(&wgpu::RequestAdapterOptions { - power_preference: wgpu::PowerPreference::HighPerformance, - compatible_surface: Some(&surface), - force_fallback_adapter: false, - }) - .await - .unwrap(); - - let (device, queue) = adapter - .request_device( - &wgpu::DeviceDescriptor { - features: wgpu::Features::empty(), - limits: wgpu::Limits::default(), - label: None, - }, - None, - ) - .await - .unwrap(); - - let config = wgpu::SurfaceConfiguration { - usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface.get_preferred_format(&adapter).unwrap(), - width: size.width, - height: size.height, - present_mode: wgpu::PresentMode::Fifo, - }; - surface.configure(&device, &config); - + pub fn new( + size: winit::dpi::PhysicalSize, + surface: wgpu::Surface, + device: wgpu::Device, + queue: wgpu::Queue, + config: wgpu::SurfaceConfiguration, + ) -> Self { let mesh_pool = MeshPool::default(); let texture_pool = TexturePool::new(&device); @@ -527,12 +499,50 @@ impl WorldState for Planets { } } +async fn make_window_renderer(window: &winit::window::Window) -> Renderer { + let size = window.inner_size(); + + let instance = wgpu::Instance::new(wgpu::Backends::all()); + let surface = unsafe { instance.create_surface(window) }; + let adapter = instance + .request_adapter(&wgpu::RequestAdapterOptions { + power_preference: wgpu::PowerPreference::HighPerformance, + compatible_surface: Some(&surface), + force_fallback_adapter: false, + }) + .await + .unwrap(); + + let (device, queue) = adapter + .request_device( + &wgpu::DeviceDescriptor { + features: wgpu::Features::empty(), + limits: wgpu::Limits::default(), + label: None, + }, + None, + ) + .await + .unwrap(); + + let config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface.get_preferred_format(&adapter).unwrap(), + width: size.width, + height: size.height, + present_mode: wgpu::PresentMode::Fifo, + }; + surface.configure(&device, &config); + + Renderer::new(size, instance, surface, device, queue, config) +} + fn main() { let event_loop = EventLoop::new(); let window = WindowBuilder::new().build(&event_loop).unwrap(); let mut camera = Flycam::new(10.0, 0.002); let mut is_grabbed = false; - let mut ren = pollster::block_on(Renderer::new(&window)); + let mut ren = pollster::block_on(make_window_renderer(&window)); // let mut state: Box = Box::new(Planets::new(&mut ren)); let mut state: Box = Box::new(Grid::new(&mut ren));