iced_wgpu/
settings.rs

1//! Configure a renderer.
2use crate::core::{Font, Pixels};
3use crate::graphics::{self, Antialiasing};
4
5/// The settings of a [`Renderer`].
6///
7/// [`Renderer`]: crate::Renderer
8#[derive(Debug, Clone, Copy, PartialEq)]
9pub struct Settings {
10    /// The present mode of the [`Renderer`].
11    ///
12    /// [`Renderer`]: crate::Renderer
13    pub present_mode: wgpu::PresentMode,
14
15    /// The graphics backends to use.
16    pub backends: wgpu::Backends,
17
18    /// The default [`Font`] to use.
19    pub default_font: Font,
20
21    /// The default size of text.
22    ///
23    /// By default, it will be set to `16.0`.
24    pub default_text_size: Pixels,
25
26    /// The antialiasing strategy that will be used for triangle primitives.
27    ///
28    /// By default, it is `None`.
29    pub antialiasing: Option<Antialiasing>,
30}
31
32impl Default for Settings {
33    fn default() -> Settings {
34        Settings {
35            present_mode: wgpu::PresentMode::AutoVsync,
36            backends: wgpu::Backends::all(),
37            default_font: Font::default(),
38            default_text_size: Pixels(16.0),
39            antialiasing: None,
40        }
41    }
42}
43
44impl From<graphics::Settings> for Settings {
45    fn from(settings: graphics::Settings) -> Self {
46        Self {
47            default_font: settings.default_font,
48            default_text_size: settings.default_text_size,
49            antialiasing: settings.antialiasing,
50            ..Settings::default()
51        }
52    }
53}
54
55/// Obtains a [`wgpu::PresentMode`] from the current environment
56/// configuration, if set.
57///
58/// The value returned by this function can be changed by setting
59/// the `ICED_PRESENT_MODE` env variable. The possible values are:
60///
61/// - `vsync` → [`wgpu::PresentMode::AutoVsync`]
62/// - `no_vsync` → [`wgpu::PresentMode::AutoNoVsync`]
63/// - `immediate` → [`wgpu::PresentMode::Immediate`]
64/// - `fifo` → [`wgpu::PresentMode::Fifo`]
65/// - `fifo_relaxed` → [`wgpu::PresentMode::FifoRelaxed`]
66/// - `mailbox` → [`wgpu::PresentMode::Mailbox`]
67pub fn present_mode_from_env() -> Option<wgpu::PresentMode> {
68    let present_mode = std::env::var("ICED_PRESENT_MODE").ok()?;
69
70    match present_mode.to_lowercase().as_str() {
71        "vsync" => Some(wgpu::PresentMode::AutoVsync),
72        "no_vsync" => Some(wgpu::PresentMode::AutoNoVsync),
73        "immediate" => Some(wgpu::PresentMode::Immediate),
74        "fifo" => Some(wgpu::PresentMode::Fifo),
75        "fifo_relaxed" => Some(wgpu::PresentMode::FifoRelaxed),
76        "mailbox" => Some(wgpu::PresentMode::Mailbox),
77        _ => None,
78    }
79}