1#[macro_export]
2macro_rules! sampler {
3 { $struct:ident as $filtering:ident } => {
4 $crate::sampler! { $struct as $filtering {} }
5 };
6 { $struct:ident as $filtering:ident {
7 $( $field:ident : $value:expr ),* $(,)?
8 } } => {
9 pub struct $struct {
10 sampler: $crate::wgpu::Sampler,
11 }
12
13 impl ::std::ops::Deref for $struct {
14 type Target = $crate::wgpu::Sampler;
15 fn deref(&self) -> &Self::Target {
16 &self.sampler
17 }
18 }
19
20 impl $crate::MewSampler for $struct {
21 fn new(sampler: $crate::wgpu::Sampler) -> Self {
22 Self {
23 sampler,
24 }
25 }
26
27 fn binding_type() -> $crate::wgpu::BindingType {
28 $crate::wgpu::BindingType::Sampler(
29 $crate::wgpu::SamplerBindingType::$filtering
30 )
31 }
32
33 fn buffer_desc() -> $crate::wgpu::SamplerDescriptor<'static> {
34 use $crate::wgpu::{
35 AddressMode::*,
36 FilterMode::*,
37 CompareFunction::*,
38 SamplerBorderColor::*,
39 };
40 $crate::wgpu::SamplerDescriptor {
41 label: Some(concat!(stringify!($struct), " Sampler")),
42 $( $field : $value, )*
43 ..Default::default()
44 }
45 }
46
47 fn as_binding<'a>(&'a self) -> $crate::wgpu::BindingResource<'a> {
48 $crate::wgpu::BindingResource::Sampler(&self.sampler)
49 }
50 }
51 }
52}
53
54
55pub trait MewSampler {
56 fn new(buffer: wgpu::Sampler) -> Self;
57 fn binding_type() -> wgpu::BindingType;
58 fn buffer_desc() -> wgpu::SamplerDescriptor<'static>;
59 fn as_binding<'a>(&'a self) -> wgpu::BindingResource<'a>;
60}