//! Configure a renderer. use crate::core::{Font, Pixels}; use crate::graphics::{self, Antialiasing}; /// The settings of a [`Renderer`]. /// /// [`Renderer`]: crate::Renderer #[derive(Debug, Clone, Copy, PartialEq)] pub struct Settings { /// The present mode of the [`Renderer`]. /// /// [`Renderer`]: crate::Renderer pub present_mode: wgpu::PresentMode, /// The graphics backends to use. pub backends: wgpu::Backends, /// The default [`Font`] to use. pub default_font: Font, /// The default size of text. /// /// By default, it will be set to `16.0`. pub default_text_size: Pixels, /// The antialiasing strategy that will be used for triangle primitives. /// /// By default, it is `None`. pub antialiasing: Option, } impl Default for Settings { fn default() -> Settings { Settings { present_mode: wgpu::PresentMode::AutoVsync, backends: wgpu::Backends::all(), default_font: Font::default(), default_text_size: Pixels(16.0), antialiasing: None, } } } impl From for Settings { fn from(settings: graphics::Settings) -> Self { Self { default_font: settings.default_font, default_text_size: settings.default_text_size, antialiasing: settings.antialiasing, ..Settings::default() } } } /// 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 { 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, } }