1use crate::core::{Font, Pixels};
3use crate::graphics::{self, Antialiasing};
4
5#[derive(Debug, Clone, Copy, PartialEq)]
9pub struct Settings {
10 pub present_mode: wgpu::PresentMode,
14
15 pub backends: wgpu::Backends,
17
18 pub default_font: Font,
20
21 pub default_text_size: Pixels,
25
26 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 present_mode: if settings.vsync {
48 wgpu::PresentMode::AutoVsync
49 } else {
50 wgpu::PresentMode::AutoNoVsync
51 },
52 default_font: settings.default_font,
53 default_text_size: settings.default_text_size,
54 antialiasing: settings.antialiasing,
55 ..Settings::default()
56 }
57 }
58}
59
60pub fn present_mode_from_env() -> Option<wgpu::PresentMode> {
73 let present_mode = std::env::var("ICED_PRESENT_MODE").ok()?;
74
75 match present_mode.to_lowercase().as_str() {
76 "vsync" => Some(wgpu::PresentMode::AutoVsync),
77 "no_vsync" => Some(wgpu::PresentMode::AutoNoVsync),
78 "immediate" => Some(wgpu::PresentMode::Immediate),
79 "fifo" => Some(wgpu::PresentMode::Fifo),
80 "fifo_relaxed" => Some(wgpu::PresentMode::FifoRelaxed),
81 "mailbox" => Some(wgpu::PresentMode::Mailbox),
82 _ => None,
83 }
84}