scenix_texture/
sampler.rs1#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
3#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4pub enum FilterMode {
5 Nearest,
7 #[default]
9 Linear,
10}
11
12#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
14#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
15pub enum AddressMode {
16 Repeat,
18 MirrorRepeat,
20 #[default]
22 ClampToEdge,
23}
24
25#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
27#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
28pub enum CompareFunction {
29 Less,
31 LessEqual,
33 Greater,
35 GreaterEqual,
37 Equal,
39 NotEqual,
41 Always,
43 Never,
45}
46
47#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
49#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
50pub struct Sampler {
51 pub mag_filter: FilterMode,
53 pub min_filter: FilterMode,
55 pub mip_filter: FilterMode,
57 pub address_u: AddressMode,
59 pub address_v: AddressMode,
61 pub address_w: AddressMode,
63 pub anisotropy: u8,
65 pub compare: Option<CompareFunction>,
67}
68
69impl Sampler {
70 #[inline]
72 pub const fn new() -> Self {
73 Self {
74 mag_filter: FilterMode::Linear,
75 min_filter: FilterMode::Linear,
76 mip_filter: FilterMode::Linear,
77 address_u: AddressMode::ClampToEdge,
78 address_v: AddressMode::ClampToEdge,
79 address_w: AddressMode::ClampToEdge,
80 anisotropy: 1,
81 compare: None,
82 }
83 }
84
85 #[inline]
87 pub const fn filters(
88 mut self,
89 mag_filter: FilterMode,
90 min_filter: FilterMode,
91 mip_filter: FilterMode,
92 ) -> Self {
93 self.mag_filter = mag_filter;
94 self.min_filter = min_filter;
95 self.mip_filter = mip_filter;
96 self
97 }
98
99 #[inline]
101 pub const fn address_modes(
102 mut self,
103 address_u: AddressMode,
104 address_v: AddressMode,
105 address_w: AddressMode,
106 ) -> Self {
107 self.address_u = address_u;
108 self.address_v = address_v;
109 self.address_w = address_w;
110 self
111 }
112
113 #[inline]
115 pub const fn anisotropy(mut self, anisotropy: u8) -> Self {
116 self.anisotropy = if anisotropy < 1 {
117 1
118 } else if anisotropy > 16 {
119 16
120 } else {
121 anisotropy
122 };
123 self
124 }
125
126 #[inline]
128 pub const fn compare(mut self, compare: Option<CompareFunction>) -> Self {
129 self.compare = compare;
130 self
131 }
132}
133
134impl Default for Sampler {
135 #[inline]
136 fn default() -> Self {
137 Self::new()
138 }
139}