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 TransparentBlack = 0,
18 OpaqueBlack = 1,
20 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}