diff options
| author | 2021-08-01 20:38:34 +0200 | |
|---|---|---|
| committer | 2021-08-03 11:30:45 +0200 | |
| commit | d7975a9de591a57b265c2d62078a65ffb9209696 (patch) | |
| tree | 1dc26f557bc84f059de82f436895858642f635e8 | |
| parent | a08e4ebccbb72f9cf6fca01047e0b46a482ca9ea (diff) | |
| download | iced-d7975a9de591a57b265c2d62078a65ffb9209696.tar.gz iced-d7975a9de591a57b265c2d62078a65ffb9209696.tar.bz2 iced-d7975a9de591a57b265c2d62078a65ffb9209696.zip | |
wgpu: Use the preferred texture format of the surface
Signed-off-by: Tilmann Meyer <me@atiltedtree.dev>
| -rw-r--r-- | examples/integration/src/main.rs | 35 | ||||
| -rw-r--r-- | wgpu/src/backend.rs | 19 | ||||
| -rw-r--r-- | wgpu/src/settings.rs | 6 | ||||
| -rw-r--r-- | wgpu/src/window/compositor.rs | 10 | 
4 files changed, 37 insertions, 33 deletions
| diff --git a/examples/integration/src/main.rs b/examples/integration/src/main.rs index b57c73d8..ffa3bf48 100644 --- a/examples/integration/src/main.rs +++ b/examples/integration/src/main.rs @@ -34,7 +34,7 @@ pub fn main() {      let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY);      let surface = unsafe { instance.create_surface(&window) }; -    let (mut device, queue) = futures::executor::block_on(async { +    let (format, (mut device, queue)) = futures::executor::block_on(async {          let adapter = instance              .request_adapter(&wgpu::RequestAdapterOptions {                  power_preference: wgpu::PowerPreference::HighPerformance, @@ -43,21 +43,24 @@ pub fn main() {              .await              .expect("Request adapter"); -        adapter -            .request_device( -                &wgpu::DeviceDescriptor { -                    label: None, -                    features: wgpu::Features::empty(), -                    limits: wgpu::Limits::default(), -                }, -                None, -            ) -            .await -            .expect("Request device") +        ( +            adapter +                .get_swap_chain_preferred_format(&surface) +                .expect("Preffered format"), +            adapter +                .request_device( +                    &wgpu::DeviceDescriptor { +                        label: None, +                        features: wgpu::Features::empty(), +                        limits: wgpu::Limits::default(), +                    }, +                    None, +                ) +                .await +                .expect("Request device"), +        )      }); -    let format = wgpu::TextureFormat::Bgra8UnormSrgb; -      let mut swap_chain = {          let size = window.inner_size(); @@ -65,7 +68,7 @@ pub fn main() {              &surface,              &wgpu::SwapChainDescriptor {                  usage: wgpu::TextureUsage::RENDER_ATTACHMENT, -                format: format, +                format,                  width: size.width,                  height: size.height,                  present_mode: wgpu::PresentMode::Mailbox, @@ -85,7 +88,7 @@ pub fn main() {      // Initialize iced      let mut debug = Debug::new();      let mut renderer = -        Renderer::new(Backend::new(&mut device, Settings::default())); +        Renderer::new(Backend::new(&mut device, Settings::default(), format));      let mut state = program::State::new(          controls, diff --git a/wgpu/src/backend.rs b/wgpu/src/backend.rs index 783079f3..4f34045b 100644 --- a/wgpu/src/backend.rs +++ b/wgpu/src/backend.rs @@ -30,23 +30,24 @@ pub struct Backend {  impl Backend {      /// Creates a new [`Backend`]. -    pub fn new(device: &wgpu::Device, settings: Settings) -> Self { +    pub fn new( +        device: &wgpu::Device, +        settings: Settings, +        format: wgpu::TextureFormat, +    ) -> Self {          let text_pipeline = text::Pipeline::new(              device, -            settings.format, +            format,              settings.default_font,              settings.text_multithreading,          ); -        let quad_pipeline = quad::Pipeline::new(device, settings.format); -        let triangle_pipeline = triangle::Pipeline::new( -            device, -            settings.format, -            settings.antialiasing, -        ); +        let quad_pipeline = quad::Pipeline::new(device, format); +        let triangle_pipeline = +            triangle::Pipeline::new(device, format, settings.antialiasing);          #[cfg(any(feature = "image_rs", feature = "svg"))] -        let image_pipeline = image::Pipeline::new(device, settings.format); +        let image_pipeline = image::Pipeline::new(device, format);          Self {              quad_pipeline, diff --git a/wgpu/src/settings.rs b/wgpu/src/settings.rs index 9a7eed34..dc06b82d 100644 --- a/wgpu/src/settings.rs +++ b/wgpu/src/settings.rs @@ -6,11 +6,6 @@ pub use crate::Antialiasing;  /// [`Backend`]: crate::Backend  #[derive(Debug, Clone, Copy, PartialEq, Eq)]  pub struct Settings { -    /// The output format of the [`Backend`]. -    /// -    /// [`Backend`]: crate::Backend -    pub format: wgpu::TextureFormat, -      /// The present mode of the [`Backend`].      ///      /// [`Backend`]: crate::Backend @@ -68,7 +63,6 @@ impl Settings {  impl Default for Settings {      fn default() -> Settings {          Settings { -            format: wgpu::TextureFormat::Bgra8UnormSrgb,              present_mode: wgpu::PresentMode::Mailbox,              internal_backend: wgpu::BackendBit::PRIMARY,              default_font: None, diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs index 9b65596f..68ebf234 100644 --- a/wgpu/src/window/compositor.rs +++ b/wgpu/src/window/compositor.rs @@ -13,6 +13,7 @@ pub struct Compositor {      queue: wgpu::Queue,      staging_belt: wgpu::util::StagingBelt,      local_pool: futures::executor::LocalPool, +    format: wgpu::TextureFormat,  }  impl Compositor { @@ -42,6 +43,10 @@ impl Compositor {              })              .await?; +        let format = compatible_surface +            .as_ref() +            .and_then(|surf| adapter.get_swap_chain_preferred_format(surf))?; +          let (device, queue) = adapter              .request_device(                  &wgpu::DeviceDescriptor { @@ -69,12 +74,13 @@ impl Compositor {              queue,              staging_belt,              local_pool, +            format,          })      }      /// Creates a new rendering [`Backend`] for this [`Compositor`].      pub fn create_backend(&self) -> Backend { -        Backend::new(&self.device, self.settings) +        Backend::new(&self.device, self.settings, self.format)      }  } @@ -119,7 +125,7 @@ impl iced_graphics::window::Compositor for Compositor {              surface,              &wgpu::SwapChainDescriptor {                  usage: wgpu::TextureUsage::RENDER_ATTACHMENT, -                format: self.settings.format, +                format: self.format,                  present_mode: self.settings.present_mode,                  width,                  height, | 
