1 type SamplerProperties = struct 2 mag_filter : VkFilter 3 min_filter : VkFilter 4 mip_filter : SamplerMipmapMode 5 repeat_u : SamplerAddressMode 6 repeat_v : SamplerAddressMode 7 repeat_w : SamplerAddressMode 8 lod_bias : f32 9 use_anisotropy : bool 10 anisotropy_max : f32 11 enable_compare : bool 12 compare_op : CompareOp 13 min_lod : f32 14 max_lod : f32 15 border_color : BorderColor 16 unnormalized_uvw : bool 17 18 object SamplerProperties = 19 val default = SamplerProperties 20 mag_filter = VkFilter/Nearest 21 min_filter = VkFilter/Nearest 22 mip_filter = SamplerMipmapMode/Nearest 23 repeat_u = SamplerAddressMode/ClampToEdge 24 repeat_v = SamplerAddressMode/ClampToEdge 25 repeat_w = SamplerAddressMode/ClampToEdge 26 lod_bias = 0 27 use_anisotropy = false 28 anisotropy_max = 1 29 enable_compare = false 30 compare_op = CompareOp/Always 31 min_lod = 0 32 max_lod = 1e20 33 border_color = BorderColor/FloatOpaqueBlack 34 unnormalized_uvw = false 35 36 object VkSampler = 37 def create (device : VkDevice) (properties : ref SamplerProperties) = 38 let sampler_info = SamplerCreateInfo 39 type = StructureType/SamplerCreateInfo 40 next = null 41 flags = SamplerCreateFlags@zero 42 mag_filter = properties.mag_filter 43 min_filter = properties.min_filter 44 mipmap_mode = SamplerMipmapMode/Linear 45 address_mode_u = properties.repeat_u 46 address_mode_v = properties.repeat_v 47 address_mode_w = properties.repeat_w 48 anisotropy_enable = if properties.use_anisotropy then 1 else 0 49 max_anisotropy = properties.anisotropy_max 50 border_color = properties.border_color 51 unnormalized_coordinates = if properties.unnormalized_uvw then 1 else 0 52 compare_enable = if properties.enable_compare then 1 else 0 53 compare_op = properties.compare_op 54 mip_lod_bias = properties.lod_bias 55 min_lod = properties.min_lod 56 max_lod = properties.max_lod 57 58 let mut sampler = null 59 vk/create_sampler device sampler_info@ptr null sampler@mut_ptr 60 61 sampler 62