From fa978e6669cd40939d004f1112f0ad16e7591d80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois?= Date: Tue, 11 Oct 2022 12:32:03 +0000 Subject: [PATCH] use bevy default texture format if the surface is not yet available (#6233) # Objective - Fix #6231 ## Solution - In case no supported format is found, try to use Bevy default instead of panicking --- crates/bevy_render/src/lib.rs | 16 ++++++++++------ crates/bevy_render/src/renderer/mod.rs | 6 +----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/crates/bevy_render/src/lib.rs b/crates/bevy_render/src/lib.rs index 4ba0e53b20154..62d0bdb7badd6 100644 --- a/crates/bevy_render/src/lib.rs +++ b/crates/bevy_render/src/lib.rs @@ -39,6 +39,7 @@ pub mod prelude { use globals::GlobalsPlugin; pub use once_cell; use prelude::ComputedVisibility; +use wgpu::TextureFormat; use crate::{ camera::CameraPlugin, @@ -48,7 +49,7 @@ use crate::{ render_graph::RenderGraph, render_resource::{PipelineCache, Shader, ShaderLoader}, renderer::{render_system, RenderInstance, RenderTextureFormat}, - texture::ImagePlugin, + texture::{BevyDefault, ImagePlugin}, view::{ViewPlugin, WindowRenderPlugin}, }; use bevy_app::{App, AppLabel, Plugin}; @@ -163,9 +164,12 @@ impl Plugin for RenderPlugin { &options, &request_adapter_options, )); - // `available_texture_formats` won't be empty, or else will panick in the former - // `initialize_renderer` call. - let first_available_texture_format = RenderTextureFormat(available_texture_formats[0]); + let texture_format = RenderTextureFormat( + available_texture_formats + .get(0) + .cloned() + .unwrap_or_else(TextureFormat::bevy_default), + ); debug!("Configured wgpu adapter Limits: {:#?}", device.limits()); debug!("Configured wgpu adapter Features: {:#?}", device.features()); app.insert_resource(device.clone()) @@ -173,7 +177,7 @@ impl Plugin for RenderPlugin { .insert_resource(adapter_info.clone()) .insert_resource(render_adapter.clone()) .insert_resource(available_texture_formats.clone()) - .insert_resource(first_available_texture_format.clone()) + .insert_resource(texture_format.clone()) .init_resource::() .register_type::() .register_type::(); @@ -217,7 +221,7 @@ impl Plugin for RenderPlugin { .insert_resource(queue) .insert_resource(render_adapter) .insert_resource(available_texture_formats) - .insert_resource(first_available_texture_format) + .insert_resource(texture_format) .insert_resource(adapter_info) .insert_resource(pipeline_cache) .insert_resource(asset_server); diff --git a/crates/bevy_render/src/renderer/mod.rs b/crates/bevy_render/src/renderer/mod.rs index 41026210a858a..8d5110d9e42ff 100644 --- a/crates/bevy_render/src/renderer/mod.rs +++ b/crates/bevy_render/src/renderer/mod.rs @@ -103,7 +103,7 @@ pub struct RenderInstance(pub Instance); pub struct RenderAdapterInfo(pub AdapterInfo); /// The [`TextureFormat`](wgpu::TextureFormat) used for rendering. -/// Initially it's the first element in `AvailableTextureFormats`. +/// Initially it's the first element in `AvailableTextureFormats`, or Bevy default format. #[derive(Resource, Clone, Deref, DerefMut)] pub struct RenderTextureFormat(pub wgpu::TextureFormat); @@ -278,10 +278,6 @@ pub async fn initialize_renderer( let mut available_texture_formats = Vec::new(); if let Some(s) = request_adapter_options.compatible_surface { available_texture_formats = s.get_supported_formats(&adapter); - if available_texture_formats.is_empty() { - info!("{:?}", adapter_info); - panic!("No supported texture formats found!"); - } }; let available_texture_formats = Arc::new(available_texture_formats); (