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