use crate::define_shared_wrapper;
use fyrox_core::define_as_any_trait;
use std::fmt::Debug;
define_as_any_trait!(GpuSamplerAsAny => GpuSamplerTrait);
pub struct GpuSamplerDescriptor {
pub min_filter: MinificationFilter,
pub mag_filter: MagnificationFilter,
pub s_wrap_mode: WrapMode,
pub t_wrap_mode: WrapMode,
pub r_wrap_mode: WrapMode,
pub anisotropy: f32,
pub min_lod: f32,
pub max_lod: f32,
pub lod_bias: f32,
}
impl Default for GpuSamplerDescriptor {
fn default() -> Self {
Self {
min_filter: Default::default(),
mag_filter: Default::default(),
s_wrap_mode: Default::default(),
t_wrap_mode: Default::default(),
r_wrap_mode: Default::default(),
anisotropy: 1.0,
min_lod: -1000.0,
max_lod: 1000.0,
lod_bias: 0.0,
}
}
}
impl GpuSamplerDescriptor {
pub fn new_rt_sampler() -> Self {
Self {
min_filter: MinificationFilter::Nearest,
mag_filter: MagnificationFilter::Nearest,
s_wrap_mode: WrapMode::ClampToEdge,
t_wrap_mode: WrapMode::ClampToEdge,
r_wrap_mode: WrapMode::ClampToEdge,
..Default::default()
}
}
}
pub trait GpuSamplerTrait: GpuSamplerAsAny + Debug {}
define_shared_wrapper!(GpuSampler<dyn GpuSamplerTrait>);
#[derive(Default, Copy, Clone, PartialOrd, PartialEq, Eq, Hash, Debug)]
#[repr(u32)]
pub enum MagnificationFilter {
Nearest,
#[default]
Linear,
}
#[derive(Default, Copy, Clone, PartialOrd, PartialEq, Eq, Hash, Debug)]
pub enum MinificationFilter {
Nearest,
NearestMipMapNearest,
NearestMipMapLinear,
#[default]
Linear,
LinearMipMapNearest,
LinearMipMapLinear,
}
#[derive(Default, Copy, Clone, Eq, PartialEq, Debug)]
pub enum WrapMode {
#[default]
Repeat,
ClampToEdge,
ClampToBorder,
MirroredRepeat,
MirrorClampToEdge,
}
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
pub enum Coordinate {
S,
T,
R,
}