2020-10-15 22:55:19 +00:00
|
|
|
#[derive(Debug)]
|
|
|
|
pub struct BitmapSamplers {
|
2022-09-24 03:14:49 +00:00
|
|
|
pub repeat_linear: wgpu::Sampler,
|
|
|
|
pub repeat_nearest: wgpu::Sampler,
|
|
|
|
pub clamp_linear: wgpu::Sampler,
|
|
|
|
pub clamp_nearest: wgpu::Sampler,
|
2023-03-14 02:25:53 +00:00
|
|
|
pub clamp_u_repeat_v_linear: wgpu::Sampler,
|
|
|
|
pub clamp_u_repeat_v_nearest: wgpu::Sampler,
|
|
|
|
pub repeat_u_clamp_v_linear: wgpu::Sampler,
|
|
|
|
pub repeat_u_clamp_v_nearest: wgpu::Sampler,
|
2020-10-15 22:55:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn create_sampler(
|
|
|
|
device: &wgpu::Device,
|
2023-03-14 02:25:53 +00:00
|
|
|
address_mode_u: wgpu::AddressMode,
|
|
|
|
address_mode_v: wgpu::AddressMode,
|
2020-10-15 22:55:19 +00:00
|
|
|
filter: wgpu::FilterMode,
|
|
|
|
sampler_label: Option<String>,
|
2022-09-08 20:13:16 +00:00
|
|
|
) -> wgpu::Sampler {
|
2020-10-15 22:55:19 +00:00
|
|
|
let sampler = device.create_sampler(&wgpu::SamplerDescriptor {
|
|
|
|
label: sampler_label.as_deref(),
|
2023-03-14 02:25:53 +00:00
|
|
|
address_mode_u,
|
|
|
|
address_mode_v,
|
|
|
|
// FIXME - does this ever get used?
|
|
|
|
address_mode_w: wgpu::AddressMode::Repeat,
|
2020-10-15 22:55:19 +00:00
|
|
|
mag_filter: filter,
|
|
|
|
min_filter: filter,
|
|
|
|
mipmap_filter: filter,
|
|
|
|
lod_min_clamp: 0.0,
|
|
|
|
lod_max_clamp: 100.0,
|
|
|
|
compare: None,
|
2023-04-24 20:06:16 +00:00
|
|
|
anisotropy_clamp: 1,
|
2020-10-15 22:55:19 +00:00
|
|
|
border_color: None,
|
|
|
|
});
|
2022-09-08 20:13:16 +00:00
|
|
|
sampler
|
2020-10-15 22:55:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl BitmapSamplers {
|
2022-09-08 20:13:16 +00:00
|
|
|
pub fn new(device: &wgpu::Device) -> Self {
|
2020-10-15 22:55:19 +00:00
|
|
|
let repeat_linear = create_sampler(
|
|
|
|
device,
|
|
|
|
wgpu::AddressMode::Repeat,
|
2023-03-14 02:25:53 +00:00
|
|
|
wgpu::AddressMode::Repeat,
|
2020-10-15 22:55:19 +00:00
|
|
|
wgpu::FilterMode::Linear,
|
|
|
|
create_debug_label!("Repeat & Linear sampler"),
|
|
|
|
);
|
|
|
|
let repeat_nearest = create_sampler(
|
|
|
|
device,
|
|
|
|
wgpu::AddressMode::Repeat,
|
2023-03-14 02:25:53 +00:00
|
|
|
wgpu::AddressMode::Repeat,
|
2020-10-15 22:55:19 +00:00
|
|
|
wgpu::FilterMode::Nearest,
|
|
|
|
create_debug_label!("Repeat & Nearest sampler"),
|
|
|
|
);
|
|
|
|
let clamp_linear = create_sampler(
|
|
|
|
device,
|
|
|
|
wgpu::AddressMode::ClampToEdge,
|
2023-03-14 02:25:53 +00:00
|
|
|
wgpu::AddressMode::ClampToEdge,
|
2020-10-15 22:55:19 +00:00
|
|
|
wgpu::FilterMode::Linear,
|
|
|
|
create_debug_label!("Clamp & Linear sampler"),
|
|
|
|
);
|
|
|
|
let clamp_nearest = create_sampler(
|
|
|
|
device,
|
|
|
|
wgpu::AddressMode::ClampToEdge,
|
2023-03-14 02:25:53 +00:00
|
|
|
wgpu::AddressMode::ClampToEdge,
|
2020-10-15 22:55:19 +00:00
|
|
|
wgpu::FilterMode::Nearest,
|
|
|
|
create_debug_label!("Clamp & Nearest sampler"),
|
|
|
|
);
|
|
|
|
|
2023-03-14 02:25:53 +00:00
|
|
|
let clamp_u_repeat_v_linear = create_sampler(
|
|
|
|
device,
|
|
|
|
wgpu::AddressMode::ClampToEdge,
|
|
|
|
wgpu::AddressMode::Repeat,
|
|
|
|
wgpu::FilterMode::Linear,
|
|
|
|
create_debug_label!("Clamp U, Repeat V & Linear sampler"),
|
|
|
|
);
|
|
|
|
|
|
|
|
let clamp_u_repeat_v_nearest = create_sampler(
|
|
|
|
device,
|
|
|
|
wgpu::AddressMode::ClampToEdge,
|
|
|
|
wgpu::AddressMode::Repeat,
|
|
|
|
wgpu::FilterMode::Nearest,
|
|
|
|
create_debug_label!("Clamp U, Repeat V & Nearest sampler"),
|
|
|
|
);
|
|
|
|
|
|
|
|
let repeat_u_clamp_v_linear = create_sampler(
|
|
|
|
device,
|
|
|
|
wgpu::AddressMode::Repeat,
|
|
|
|
wgpu::AddressMode::ClampToEdge,
|
|
|
|
wgpu::FilterMode::Linear,
|
|
|
|
create_debug_label!("Repeat U, Clamp V & Linear sampler"),
|
|
|
|
);
|
|
|
|
|
|
|
|
let repeat_u_clamp_v_nearest = create_sampler(
|
|
|
|
device,
|
|
|
|
wgpu::AddressMode::Repeat,
|
|
|
|
wgpu::AddressMode::ClampToEdge,
|
|
|
|
wgpu::FilterMode::Nearest,
|
|
|
|
create_debug_label!("Repeat U, Clamp V & Nearest sampler"),
|
|
|
|
);
|
|
|
|
|
2020-10-15 22:55:19 +00:00
|
|
|
Self {
|
|
|
|
repeat_linear,
|
|
|
|
repeat_nearest,
|
|
|
|
clamp_linear,
|
|
|
|
clamp_nearest,
|
2023-03-14 02:25:53 +00:00
|
|
|
clamp_u_repeat_v_linear,
|
|
|
|
clamp_u_repeat_v_nearest,
|
|
|
|
repeat_u_clamp_v_linear,
|
|
|
|
repeat_u_clamp_v_nearest,
|
2020-10-15 22:55:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-08 20:13:16 +00:00
|
|
|
pub fn get_sampler(&self, is_repeating: bool, is_smoothed: bool) -> &wgpu::Sampler {
|
2020-10-15 22:55:19 +00:00
|
|
|
match (is_repeating, is_smoothed) {
|
|
|
|
(true, true) => &self.repeat_linear,
|
|
|
|
(true, false) => &self.repeat_nearest,
|
|
|
|
(false, true) => &self.clamp_linear,
|
|
|
|
(false, false) => &self.clamp_nearest,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|