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