use crate::wgpu;
#[macro_export]
macro_rules! sampler {
{ $struct:ident as $filtering:ident } => {
$crate::sampler! { $struct as $filtering {} }
};
{ $struct:ident as $filtering:ident {
$( $field:ident: $value:expr ),* $(,)?
} } => {
#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct $struct {
sampler: $crate::wgpu::Sampler,
}
impl ::std::ops::Deref for $struct {
type Target = $crate::wgpu::Sampler;
fn deref(&self) -> &Self::Target {
&self.sampler
}
}
impl $crate::sampler::MewSampler for $struct {
fn new(sampler: $crate::wgpu::Sampler) -> Self {
Self {
sampler,
}
}
fn binding_type() -> $crate::wgpu::BindingType {
$crate::wgpu::BindingType::Sampler(
$crate::wgpu::SamplerBindingType::$filtering
)
}
fn buffer_desc() -> $crate::wgpu::SamplerDescriptor<'static> {
#[allow(unused_imports)]
use $crate::wgpu::{
AddressMode::*,
FilterMode::*,
CompareFunction::*,
SamplerBorderColor::*,
};
$crate::wgpu::SamplerDescriptor {
label: Some(concat!(stringify!($struct), " Sampler")),
$( $field : $value, )*
..Default::default()
}
}
fn as_binding(&self) -> $crate::wgpu::BindingResource<'_> {
$crate::wgpu::BindingResource::Sampler(&self.sampler)
}
}
}
}
pub use sampler;
pub trait MewSampler {
fn new(buffer: wgpu::Sampler) -> Self;
fn binding_type() -> wgpu::BindingType;
fn buffer_desc() -> wgpu::SamplerDescriptor<'static>;
fn as_binding(&self) -> wgpu::BindingResource<'_>;
}