diff options
| author | 2024-05-07 21:22:29 +0200 | |
|---|---|---|
| committer | 2024-05-07 21:22:29 +0200 | |
| commit | 18b2f8845e5f488822f840c7e66a957af34b1862 (patch) | |
| tree | 172f7a05813331a9233b147b67b45417476ed5e0 /wgpu/src | |
| parent | db07b9ba9ef20c5995076992bf5592af12698000 (diff) | |
| parent | 5b6f3499e114c1694a5878466f8d46e7022e1bba (diff) | |
| download | iced-18b2f8845e5f488822f840c7e66a957af34b1862.tar.gz iced-18b2f8845e5f488822f840c7e66a957af34b1862.tar.bz2 iced-18b2f8845e5f488822f840c7e66a957af34b1862.zip | |
Merge pull request #2428 from iced-rs/feature/present-mode-env-var
Introduce `ICED_PRESENT_MODE` env var to pick a `wgpu::PresentMode`
Diffstat (limited to '')
| -rw-r--r-- | wgpu/src/settings.rs | 26 | ||||
| -rw-r--r-- | wgpu/src/window/compositor.rs | 25 | 
2 files changed, 41 insertions, 10 deletions
| diff --git a/wgpu/src/settings.rs b/wgpu/src/settings.rs index a6aea0a5..b3c3cf6a 100644 --- a/wgpu/src/settings.rs +++ b/wgpu/src/settings.rs @@ -51,3 +51,29 @@ impl From<graphics::Settings> for Settings {          }      }  } + +/// Obtains a [`wgpu::PresentMode`] from the current environment +/// configuration, if set. +/// +/// The value returned by this function can be changed by setting +/// the `ICED_PRESENT_MODE` env variable. The possible values are: +/// +/// - `vsync` → [`wgpu::PresentMode::AutoVsync`] +/// - `no_vsync` → [`wgpu::PresentMode::AutoNoVsync`] +/// - `immediate` → [`wgpu::PresentMode::Immediate`] +/// - `fifo` → [`wgpu::PresentMode::Fifo`] +/// - `fifo_relaxed` → [`wgpu::PresentMode::FifoRelaxed`] +/// - `mailbox` → [`wgpu::PresentMode::Mailbox`] +pub fn present_mode_from_env() -> Option<wgpu::PresentMode> { +    let present_mode = std::env::var("ICED_PRESENT_MODE").ok()?; + +    match present_mode.to_lowercase().as_str() { +        "vsync" => Some(wgpu::PresentMode::AutoVsync), +        "no_vsync" => Some(wgpu::PresentMode::AutoNoVsync), +        "immediate" => Some(wgpu::PresentMode::Immediate), +        "fifo" => Some(wgpu::PresentMode::Fifo), +        "fifo_relaxed" => Some(wgpu::PresentMode::FifoRelaxed), +        "mailbox" => Some(wgpu::PresentMode::Mailbox), +        _ => None, +    } +} diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs index baf9f315..2e938c77 100644 --- a/wgpu/src/window/compositor.rs +++ b/wgpu/src/window/compositor.rs @@ -4,7 +4,8 @@ use crate::graphics::color;  use crate::graphics::compositor;  use crate::graphics::error;  use crate::graphics::{self, Viewport}; -use crate::{Engine, Renderer, Settings}; +use crate::settings::{self, Settings}; +use crate::{Engine, Renderer};  /// A window graphics backend for iced powered by `wgpu`.  #[allow(missing_debug_implementations)] @@ -270,15 +271,19 @@ impl graphics::Compositor for Compositor {          backend: Option<&str>,      ) -> Result<Self, graphics::Error> {          match backend { -            None | Some("wgpu") => Ok(new( -                Settings { -                    backends: wgpu::util::backend_bits_from_env() -                        .unwrap_or(wgpu::Backends::all()), -                    ..settings.into() -                }, -                compatible_window, -            ) -            .await?), +            None | Some("wgpu") => { +                let mut settings = Settings::from(settings); + +                if let Some(backends) = wgpu::util::backend_bits_from_env() { +                    settings.backends = backends; +                } + +                if let Some(present_mode) = settings::present_mode_from_env() { +                    settings.present_mode = present_mode; +                } + +                Ok(new(settings, compatible_window).await?) +            }              Some(backend) => Err(graphics::Error::GraphicsAdapterNotFound {                  backend: "wgpu",                  reason: error::Reason::DidNotMatch { | 
