From 5e3ae770ac89192e73f2473468b734d414ea0e16 Mon Sep 17 00:00:00 2001 From: ira Date: Mon, 29 May 2023 09:22:13 +0200 Subject: [PATCH] Fix screenshots on Wayland + Nvidia (#8701) # Objective Fix #8604 ## Solution Use `.add_srgb_suffix()` when creating the screenshot texture. Allow converting `Bgra8Unorm` images. Only a two line change for the fix, the `screenshot.rs` changes are just a bit of cleanup. --- .../bevy_render/src/texture/image_texture_conversion.rs | 2 +- crates/bevy_render/src/view/window.rs | 2 +- crates/bevy_render/src/view/window/screenshot.rs | 9 ++------- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/crates/bevy_render/src/texture/image_texture_conversion.rs b/crates/bevy_render/src/texture/image_texture_conversion.rs index 387d08b307..8a6f51852b 100644 --- a/crates/bevy_render/src/texture/image_texture_conversion.rs +++ b/crates/bevy_render/src/texture/image_texture_conversion.rs @@ -199,7 +199,7 @@ impl Image { .map(DynamicImage::ImageRgba8), // This format is commonly used as the format for the swapchain texture // This conversion is added here to support screenshots - TextureFormat::Bgra8UnormSrgb => ImageBuffer::from_raw( + TextureFormat::Bgra8UnormSrgb | TextureFormat::Bgra8Unorm => ImageBuffer::from_raw( self.texture_descriptor.size.width, self.texture_descriptor.size.height, { diff --git a/crates/bevy_render/src/view/window.rs b/crates/bevy_render/src/view/window.rs index 9bf79df741..d022d4cc53 100644 --- a/crates/bevy_render/src/view/window.rs +++ b/crates/bevy_render/src/view/window.rs @@ -377,7 +377,7 @@ pub fn prepare_windows( mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: surface_configuration.format, + format: surface_configuration.format.add_srgb_suffix(), usage: TextureUsages::RENDER_ATTACHMENT | TextureUsages::COPY_SRC | TextureUsages::TEXTURE_BINDING, diff --git a/crates/bevy_render/src/view/window/screenshot.rs b/crates/bevy_render/src/view/window/screenshot.rs index ab7d9e8818..440634c274 100644 --- a/crates/bevy_render/src/view/window/screenshot.rs +++ b/crates/bevy_render/src/view/window/screenshot.rs @@ -234,16 +234,11 @@ impl SpecializedRenderPipeline for ScreenshotToScreenPipeline { shader: SCREENSHOT_SHADER_HANDLE.typed(), }, primitive: wgpu::PrimitiveState { - topology: wgpu::PrimitiveTopology::TriangleList, - strip_index_format: None, - front_face: wgpu::FrontFace::Ccw, cull_mode: Some(wgpu::Face::Back), - polygon_mode: wgpu::PolygonMode::Fill, - conservative: false, - unclipped_depth: false, + ..Default::default() }, depth_stencil: None, - multisample: wgpu::MultisampleState::default(), + multisample: Default::default(), fragment: Some(FragmentState { shader: SCREENSHOT_SHADER_HANDLE.typed(), entry_point: Cow::Borrowed("fs_main"),