Skip to content

Commit

Permalink
use bevy default texture format if the surface is not yet available (b…
Browse files Browse the repository at this point in the history
…evyengine#6233)

# Objective

- Fix bevyengine#6231

## Solution

- In case no supported format is found, try to use Bevy default instead of panicking
  • Loading branch information
mockersf authored and ItsDoot committed Feb 1, 2023
1 parent 0cbebaf commit fa978e6
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 11 deletions.
16 changes: 10 additions & 6 deletions crates/bevy_render/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ pub mod prelude {
use globals::GlobalsPlugin;
pub use once_cell;
use prelude::ComputedVisibility;
use wgpu::TextureFormat;

use crate::{
camera::CameraPlugin,
Expand All @@ -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};
Expand Down Expand Up @@ -163,17 +164,20 @@ 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())
.insert_resource(queue.clone())
.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>();
Expand Down Expand Up @@ -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);
Expand Down
6 changes: 1 addition & 5 deletions crates/bevy_render/src/renderer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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);
(
Expand Down

0 comments on commit fa978e6

Please sign in to comment.