mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 07:04:33 +00:00
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
This commit is contained in:
parent
7673db731e
commit
13dcdba05f
2 changed files with 11 additions and 11 deletions
|
@ -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::<ScratchMainWorld>()
|
||||
.register_type::<Frustum>()
|
||||
.register_type::<CubemapFrusta>();
|
||||
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
(
|
||||
|
|
Loading…
Reference in a new issue