iron_oxide/
sampler.rs

1use crate::import_objc_macros::*;
2use crate::{handle, MTLCompareFunction, NSUInteger, Object, ObjectPointer};
3
4#[repr(u64)]
5pub enum MTLSamplerAddressMode {
6    ClampToEdge = 0,
7    MirrorClampToEdge = 1,
8    Repeat = 2,
9    MirrorRepeat = 3,
10    ClampToZero = 4,
11    ClampToBorderColor = 5,
12}
13
14#[repr(u64)]
15pub enum MTLSamplerBorderColor {
16    /// 0, 0, 0, 0,
17    TransparentBlack = 0,
18    /// 0, 0, 0, 1,
19    OpaqueBlack = 1,
20    /// 1, 1, 1, 1,
21    OpaqueWhite = 2,
22}
23
24#[repr(u64)]
25pub enum MTLSamplerMinMagFilter {
26    Nearest = 0,
27    Linear = 1,
28}
29
30pub struct MTLSamplerDescriptor(ObjectPointer);
31handle!(MTLSamplerDescriptor);
32
33impl MTLSamplerDescriptor {
34    pub unsafe fn new() -> MTLSamplerDescriptor {
35        MTLSamplerDescriptor::from_ptr(msg_send![class!(MTLSamplerDescriptor), new])
36    }
37    pub unsafe fn set_normalized_coords(&self, normalized: bool) {
38        msg_send![self.get_ptr(), setNormalizedCoordinates: normalized]
39    }
40    pub unsafe fn set_r_address_mode(&self, mode: MTLSamplerAddressMode) {
41        msg_send![self.get_ptr(), setRAddressMode: mode]
42    }
43    pub unsafe fn set_s_address_mode(&self, mode: MTLSamplerAddressMode) {
44        msg_send![self.get_ptr(), setSAddressMode: mode]
45    }
46    pub unsafe fn set_t_address_mode(&self, mode: MTLSamplerAddressMode) {
47        msg_send![self.get_ptr(), setTAddressMode: mode]
48    }
49    pub unsafe fn set_border_color(&self, color: MTLSamplerBorderColor) {
50        msg_send![self.get_ptr(), setBorderColor: color]
51    }
52    pub unsafe fn set_min_filter(&self, filter: MTLSamplerMinMagFilter) {
53        msg_send![self.get_ptr(), setMinFilter: filter]
54    }
55    pub unsafe fn set_mag_filter(&self, filter: MTLSamplerMinMagFilter) {
56        msg_send![self.get_ptr(), setMagFilter: filter]
57    }
58    pub unsafe fn set_map_filter(&self, filter: MTLSamplerMinMagFilter) {
59        msg_send![self.get_ptr(), setMipFilter: filter]
60    }
61    pub unsafe fn set_lod_min_clamp(&self, clamp: f32) {
62        msg_send![self.get_ptr(), setLodMinClamp: clamp]
63    }
64    pub unsafe fn set_lod_max_clamp(&self, clamp: f32) {
65        msg_send![self.get_ptr(), setLodMaxClamp: clamp]
66    }
67    pub unsafe fn set_lod_average(&self, average: bool) {
68        msg_send![self.get_ptr(), setLodAverage: average]
69    }
70    pub unsafe fn set_max_anisotropy(&self, max: NSUInteger) {
71        msg_send![self.get_ptr(), setMaxAnisotropy: max]
72    }
73    pub unsafe fn set_compare_function(&self, function: MTLCompareFunction) {
74        msg_send![self.get_ptr(), setCompareFunction: function]
75    }
76    pub unsafe fn set_supports_argument_buffers(&self, supports: bool) {
77        msg_send![self.get_ptr(), setSupportArgumentBuffers: supports]
78    }
79}
80
81impl Object for MTLSamplerDescriptor {
82    unsafe fn from_ptr(ptr: ObjectPointer) -> Self
83    where
84        Self: Sized,
85    {
86        MTLSamplerDescriptor(ptr)
87    }
88
89    fn get_ptr(&self) -> ObjectPointer {
90        self.0
91    }
92}
93
94pub struct MTLSamplerState(ObjectPointer);
95handle!(MTLSamplerState);
96
97impl Object for MTLSamplerState {
98    unsafe fn from_ptr(ptr: ObjectPointer) -> Self
99    where
100        Self: Sized,
101    {
102        MTLSamplerState(ptr)
103    }
104
105    fn get_ptr(&self) -> ObjectPointer {
106        self.0
107    }
108}