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 super::{depthstencil::MTLCompareFunction, DeviceRef, NSUInteger}; 9 10 #[repr(u64)] 11 #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] 12 pub enum MTLSamplerMinMagFilter { 13 Nearest = 0, 14 Linear = 1, 15 } 16 17 #[repr(u64)] 18 #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] 19 pub enum MTLSamplerMipFilter { 20 NotMipmapped = 0, 21 Nearest = 1, 22 Linear = 2, 23 } 24 25 #[repr(u64)] 26 #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] 27 pub enum MTLSamplerAddressMode { 28 ClampToEdge = 0, 29 MirrorClampToEdge = 1, 30 Repeat = 2, 31 MirrorRepeat = 3, 32 ClampToZero = 4, 33 ClampToBorderColor = 5, 34 } 35 36 #[repr(u64)] 37 #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] 38 pub enum MTLSamplerBorderColor { 39 TransparentBlack = 0, 40 OpaqueBlack = 1, 41 OpaqueWhite = 2, 42 } 43 44 pub enum MTLSamplerDescriptor {} 45 46 foreign_obj_type! { 47 type CType = MTLSamplerDescriptor; 48 pub struct SamplerDescriptor; 49 pub struct SamplerDescriptorRef; 50 } 51 52 impl SamplerDescriptor { new() -> Self53 pub fn new() -> Self { 54 unsafe { 55 let class = class!(MTLSamplerDescriptor); 56 msg_send![class, new] 57 } 58 } 59 } 60 61 impl SamplerDescriptorRef { set_min_filter(&self, filter: MTLSamplerMinMagFilter)62 pub fn set_min_filter(&self, filter: MTLSamplerMinMagFilter) { 63 unsafe { msg_send![self, setMinFilter: filter] } 64 } 65 set_mag_filter(&self, filter: MTLSamplerMinMagFilter)66 pub fn set_mag_filter(&self, filter: MTLSamplerMinMagFilter) { 67 unsafe { msg_send![self, setMagFilter: filter] } 68 } 69 set_mip_filter(&self, filter: MTLSamplerMipFilter)70 pub fn set_mip_filter(&self, filter: MTLSamplerMipFilter) { 71 unsafe { msg_send![self, setMipFilter: filter] } 72 } 73 set_address_mode_s(&self, mode: MTLSamplerAddressMode)74 pub fn set_address_mode_s(&self, mode: MTLSamplerAddressMode) { 75 unsafe { msg_send![self, setSAddressMode: mode] } 76 } 77 set_address_mode_t(&self, mode: MTLSamplerAddressMode)78 pub fn set_address_mode_t(&self, mode: MTLSamplerAddressMode) { 79 unsafe { msg_send![self, setTAddressMode: mode] } 80 } 81 set_address_mode_r(&self, mode: MTLSamplerAddressMode)82 pub fn set_address_mode_r(&self, mode: MTLSamplerAddressMode) { 83 unsafe { msg_send![self, setRAddressMode: mode] } 84 } 85 set_max_anisotropy(&self, anisotropy: NSUInteger)86 pub fn set_max_anisotropy(&self, anisotropy: NSUInteger) { 87 unsafe { msg_send![self, setMaxAnisotropy: anisotropy] } 88 } 89 set_compare_function(&self, func: MTLCompareFunction)90 pub fn set_compare_function(&self, func: MTLCompareFunction) { 91 unsafe { msg_send![self, setCompareFunction: func] } 92 } 93 94 #[cfg(feature = "private")] set_lod_bias(&self, bias: f32)95 pub unsafe fn set_lod_bias(&self, bias: f32) { 96 msg_send![self, setLodBias: bias] 97 } 98 set_lod_min_clamp(&self, clamp: f32)99 pub fn set_lod_min_clamp(&self, clamp: f32) { 100 unsafe { msg_send![self, setLodMinClamp: clamp] } 101 } 102 set_lod_max_clamp(&self, clamp: f32)103 pub fn set_lod_max_clamp(&self, clamp: f32) { 104 unsafe { msg_send![self, setLodMaxClamp: clamp] } 105 } 106 set_lod_average(&self, enable: bool)107 pub fn set_lod_average(&self, enable: bool) { 108 unsafe { msg_send![self, setLodAverage: enable] } 109 } 110 set_normalized_coordinates(&self, enable: bool)111 pub fn set_normalized_coordinates(&self, enable: bool) { 112 unsafe { msg_send![self, setNormalizedCoordinates: enable] } 113 } 114 set_support_argument_buffers(&self, enable: bool)115 pub fn set_support_argument_buffers(&self, enable: bool) { 116 unsafe { msg_send![self, setSupportArgumentBuffers: enable] } 117 } 118 set_border_color(&self, color: MTLSamplerBorderColor)119 pub fn set_border_color(&self, color: MTLSamplerBorderColor) { 120 unsafe { msg_send![self, setBorderColor: color] } 121 } 122 label(&self) -> &str123 pub fn label(&self) -> &str { 124 unsafe { 125 let label = msg_send![self, label]; 126 crate::nsstring_as_str(label) 127 } 128 } 129 set_label(&self, label: &str)130 pub fn set_label(&self, label: &str) { 131 unsafe { 132 let nslabel = crate::nsstring_from_str(label); 133 let () = msg_send![self, setLabel: nslabel]; 134 } 135 } 136 } 137 138 pub enum MTLSamplerState {} 139 140 foreign_obj_type! { 141 type CType = MTLSamplerState; 142 pub struct SamplerState; 143 pub struct SamplerStateRef; 144 } 145 146 impl SamplerStateRef { device(&self) -> &DeviceRef147 pub fn device(&self) -> &DeviceRef { 148 unsafe { msg_send![self, device] } 149 } 150 label(&self) -> &str151 pub fn label(&self) -> &str { 152 unsafe { 153 let label = msg_send![self, label]; 154 crate::nsstring_as_str(label) 155 } 156 } 157 } 158