1 // Copyright 2016 GFX developers
2 //
3 // Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
4 // http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
5 // http://opensource.org/licenses/MIT>, at your option. This file may not be
6 // copied, modified, or distributed except according to those terms.
7 
8 use cocoa::foundation::NSUInteger;
9 
10 use crate::depthstencil::MTLCompareFunction;
11 
12 #[repr(u64)]
13 #[derive(Copy, Clone)]
14 pub enum MTLSamplerMinMagFilter {
15     Nearest = 0,
16     Linear = 1,
17 }
18 
19 #[repr(u64)]
20 #[derive(Copy, Clone)]
21 pub enum MTLSamplerMipFilter {
22     NotMipmapped = 0,
23     Nearest = 1,
24     Linear = 2,
25 }
26 
27 #[repr(u64)]
28 #[derive(Copy, Clone)]
29 pub enum MTLSamplerAddressMode {
30     ClampToEdge = 0,
31     MirrorClampToEdge = 1,
32     Repeat = 2,
33     MirrorRepeat = 3,
34     ClampToZero = 4,
35     ClampToBorderColor = 5,
36 }
37 
38 #[repr(u64)]
39 #[derive(Copy, Clone)]
40 pub enum MTLSamplerBorderColor {
41     TransparentBlack = 0,
42     OpaqueBlack = 1,
43     OpaqueWhite = 2,
44 }
45 
46 pub enum MTLSamplerDescriptor {}
47 
48 foreign_obj_type! {
49     type CType = MTLSamplerDescriptor;
50     pub struct SamplerDescriptor;
51     pub struct SamplerDescriptorRef;
52 }
53 
54 impl SamplerDescriptor {
new() -> Self55     pub fn new() -> Self {
56         unsafe {
57             let class = class!(MTLSamplerDescriptor);
58             msg_send![class, new]
59         }
60     }
61 }
62 
63 impl SamplerDescriptorRef {
set_min_filter(&self, filter: MTLSamplerMinMagFilter)64     pub fn set_min_filter(&self, filter: MTLSamplerMinMagFilter) {
65         unsafe { msg_send![self, setMinFilter: filter] }
66     }
67 
set_mag_filter(&self, filter: MTLSamplerMinMagFilter)68     pub fn set_mag_filter(&self, filter: MTLSamplerMinMagFilter) {
69         unsafe { msg_send![self, setMagFilter: filter] }
70     }
71 
set_mip_filter(&self, filter: MTLSamplerMipFilter)72     pub fn set_mip_filter(&self, filter: MTLSamplerMipFilter) {
73         unsafe { msg_send![self, setMipFilter: filter] }
74     }
75 
set_address_mode_s(&self, mode: MTLSamplerAddressMode)76     pub fn set_address_mode_s(&self, mode: MTLSamplerAddressMode) {
77         unsafe { msg_send![self, setSAddressMode: mode] }
78     }
79 
set_address_mode_t(&self, mode: MTLSamplerAddressMode)80     pub fn set_address_mode_t(&self, mode: MTLSamplerAddressMode) {
81         unsafe { msg_send![self, setTAddressMode: mode] }
82     }
83 
set_address_mode_r(&self, mode: MTLSamplerAddressMode)84     pub fn set_address_mode_r(&self, mode: MTLSamplerAddressMode) {
85         unsafe { msg_send![self, setRAddressMode: mode] }
86     }
87 
set_max_anisotropy(&self, anisotropy: NSUInteger)88     pub fn set_max_anisotropy(&self, anisotropy: NSUInteger) {
89         unsafe { msg_send![self, setMaxAnisotropy: anisotropy] }
90     }
91 
set_compare_function(&self, func: MTLCompareFunction)92     pub fn set_compare_function(&self, func: MTLCompareFunction) {
93         unsafe { msg_send![self, setCompareFunction: func] }
94     }
95 
96     #[cfg(feature = "private")]
set_lod_bias(&self, bias: f32)97     pub unsafe fn set_lod_bias(&self, bias: f32) {
98         msg_send![self, setLodBias: bias]
99     }
100 
set_lod_min_clamp(&self, clamp: f32)101     pub fn set_lod_min_clamp(&self, clamp: f32) {
102         unsafe { msg_send![self, setLodMinClamp: clamp] }
103     }
104 
set_lod_max_clamp(&self, clamp: f32)105     pub fn set_lod_max_clamp(&self, clamp: f32) {
106         unsafe { msg_send![self, setLodMaxClamp: clamp] }
107     }
108 
set_lod_average(&self, enable: bool)109     pub fn set_lod_average(&self, enable: bool) {
110         unsafe { msg_send![self, setLodAverage: enable] }
111     }
112 
set_normalized_coordinates(&self, enable: bool)113     pub fn set_normalized_coordinates(&self, enable: bool) {
114         unsafe { msg_send![self, setNormalizedCoordinates: enable] }
115     }
116 
set_support_argument_buffers(&self, enable: bool)117     pub fn set_support_argument_buffers(&self, enable: bool) {
118         unsafe { msg_send![self, setSupportArgumentBuffers: enable] }
119     }
120 
set_border_color(&self, color: MTLSamplerBorderColor)121     pub fn set_border_color(&self, color: MTLSamplerBorderColor) {
122         unsafe { msg_send![self, setBorderColor: color] }
123     }
124 }
125 
126 pub enum MTLSamplerState {}
127 
128 foreign_obj_type! {
129     type CType = MTLSamplerState;
130     pub struct SamplerState;
131     pub struct SamplerStateRef;
132 }
133