Creates a new renderer.
(
size: WindowSize,
settings: crate::EngineSettings,
)
| 48 | impl Renderer { |
| 49 | /// Creates a new renderer. |
| 50 | pub(crate) async fn new( |
| 51 | size: WindowSize, |
| 52 | settings: crate::EngineSettings, |
| 53 | ) -> Result<Self, crate::error::Error> { |
| 54 | // The instance is a handle to our GPU |
| 55 | let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor { |
| 56 | backends: settings.backends, |
| 57 | ..Default::default() |
| 58 | }); |
| 59 | |
| 60 | match instance |
| 61 | .request_adapter(&wgpu::RequestAdapterOptions { |
| 62 | power_preference: settings.power_preference, |
| 63 | compatible_surface: None, |
| 64 | force_fallback_adapter: false, |
| 65 | }) |
| 66 | .await |
| 67 | { |
| 68 | Ok(adapter) => { |
| 69 | let (device, queue) = adapter |
| 70 | .request_device(&wgpu::DeviceDescriptor { |
| 71 | label: Some("Device"), |
| 72 | required_features: settings.features, |
| 73 | required_limits: settings.limits, |
| 74 | memory_hints: if settings.power_preference |
| 75 | == wgpu::PowerPreference::HighPerformance |
| 76 | { |
| 77 | wgpu::MemoryHints::Performance |
| 78 | } else { |
| 79 | wgpu::MemoryHints::MemoryUsage |
| 80 | }, |
| 81 | trace: wgpu::Trace::Off, |
| 82 | ..Default::default() |
| 83 | }) |
| 84 | .await?; |
| 85 | |
| 86 | let texture_format = wgpu::TextureFormat::Bgra8UnormSrgb; |
| 87 | |
| 88 | #[cfg(target_os = "android")] |
| 89 | let texture_format = wgpu::TextureFormat::Rgba8UnormSrgb; |
| 90 | |
| 91 | let config = wgpu::SurfaceConfiguration { |
| 92 | usage: wgpu::TextureUsages::RENDER_ATTACHMENT, |
| 93 | format: texture_format, //wgpu::TextureFormat::Bgra8UnormSrgb, |
| 94 | #[cfg(target_os = "android")] |
| 95 | width: 1080, |
| 96 | #[cfg(not(feature = "android"))] |
| 97 | width: size.0, |
| 98 | #[cfg(target_os = "android")] |
| 99 | height: 2300, |
| 100 | #[cfg(not(target_os = "android"))] |
| 101 | height: size.1, |
| 102 | #[cfg(target_os = "android")] |
| 103 | present_mode: wgpu::PresentMode::Mailbox, |
| 104 | #[cfg(not(target_os = "android"))] |
| 105 | present_mode: settings.present_mode, |
| 106 | alpha_mode: settings.alpha_mode, |
| 107 | view_formats: vec![texture_format], |
nothing calls this directly
no test coverage detected