Skip to main content

par_term_render/
wgpu_conversions.rs

1//! wgpu conversion helpers for `par-term-config` rendering enums.
2//!
3//! These used to live in `par-term-config` behind the `wgpu-types` feature
4//! (see AUDIT.md ARC-003). That was a layering violation: a Layer-1 pure-data
5//! crate carried an optional dependency on Layer-3 GPU types. The helpers now
6//! live here in `par-term-render` — the Layer-3 crate that actually depends on
7//! wgpu — and are exposed as narrow extension traits so existing call sites
8//! keep the same method names (`vsync.to_present_mode()`,
9//! `pref.to_wgpu()`, `scaling.to_filter_mode()`).
10//!
11//! Call sites must `use crate::wgpu_conversions::{...};` to bring the methods
12//! into scope.
13
14use par_term_config::{ImageScalingMode, PowerPreference, VsyncMode};
15
16/// `VsyncMode` → `wgpu::PresentMode`.
17pub trait VsyncModeWgpu {
18    fn to_present_mode(self) -> wgpu::PresentMode;
19}
20
21/// `PowerPreference` → `wgpu::PowerPreference`.
22pub trait PowerPreferenceWgpu {
23    fn to_wgpu(self) -> wgpu::PowerPreference;
24}
25
26/// `ImageScalingMode` → `wgpu::FilterMode`.
27pub trait ImageScalingModeWgpu {
28    fn to_filter_mode(self) -> wgpu::FilterMode;
29}
30
31impl VsyncModeWgpu for VsyncMode {
32    fn to_present_mode(self) -> wgpu::PresentMode {
33        match self {
34            VsyncMode::Immediate => wgpu::PresentMode::Immediate,
35            VsyncMode::Mailbox => wgpu::PresentMode::Mailbox,
36            VsyncMode::Fifo => wgpu::PresentMode::Fifo,
37        }
38    }
39}
40
41impl PowerPreferenceWgpu for PowerPreference {
42    fn to_wgpu(self) -> wgpu::PowerPreference {
43        match self {
44            PowerPreference::None => wgpu::PowerPreference::None,
45            PowerPreference::LowPower => wgpu::PowerPreference::LowPower,
46            PowerPreference::HighPerformance => wgpu::PowerPreference::HighPerformance,
47        }
48    }
49}
50
51impl ImageScalingModeWgpu for ImageScalingMode {
52    fn to_filter_mode(self) -> wgpu::FilterMode {
53        match self {
54            ImageScalingMode::Nearest => wgpu::FilterMode::Nearest,
55            ImageScalingMode::Linear => wgpu::FilterMode::Linear,
56        }
57    }
58}