Skip to main content

oxide_renderer/texture/
sampler.rs

1//! Sampler creation utilities
2
3use wgpu::{AddressMode, FilterMode, MipmapFilterMode};
4
5/// Descriptor for creating a sampler.
6#[derive(Clone, Copy, Debug)]
7pub struct SamplerDescriptor {
8    pub address_mode_u: AddressMode,
9    pub address_mode_v: AddressMode,
10    pub address_mode_w: AddressMode,
11    pub mag_filter: FilterMode,
12    pub min_filter: FilterMode,
13    pub mipmap_filter: MipmapFilterMode,
14}
15
16impl Default for SamplerDescriptor {
17    fn default() -> Self {
18        Self {
19            address_mode_u: AddressMode::ClampToEdge,
20            address_mode_v: AddressMode::ClampToEdge,
21            address_mode_w: AddressMode::ClampToEdge,
22            mag_filter: FilterMode::Linear,
23            min_filter: FilterMode::Linear,
24            mipmap_filter: MipmapFilterMode::Nearest,
25        }
26    }
27}
28
29impl SamplerDescriptor {
30    /// Creates a linear-filtered sampler with clamp-to-edge addressing.
31    pub fn linear() -> Self {
32        Self::default()
33    }
34
35    /// Creates a nearest-neighbor filtered sampler for pixel art.
36    pub fn nearest() -> Self {
37        Self {
38            mag_filter: FilterMode::Nearest,
39            min_filter: FilterMode::Nearest,
40            mipmap_filter: MipmapFilterMode::Nearest,
41            ..Self::default()
42        }
43    }
44
45    /// Creates a repeating sampler.
46    pub fn repeat() -> Self {
47        Self {
48            address_mode_u: AddressMode::Repeat,
49            address_mode_v: AddressMode::Repeat,
50            address_mode_w: AddressMode::Repeat,
51            ..Self::default()
52        }
53    }
54}