1 type Image = 2 val name : String 3 val view_type : ViewType 4 val format : VkFormat 5 val width : u32 6 val height : u32 7 val depth : u32 8 val base_mip_level : u32 9 val mip_levels : u32 10 val base_layer : u32 11 val array_layers : u32 12 val samples : SampleCountFlags 13 val usage : ImageUsageFlags 14 var layout : ImageLayout @[mut internal] 15 let device : VkDevice 16 val sampler : VkSampler 17 val object : VkImage 18 let memory : VkMemory 19 val view : VkImageView 20 val size : u64 21 22 def discard = 23 vk/destroy_image_view device view null 24 vk/destroy_image device object null 25 vk/free_memory device memory null 26 vk/destroy_sampler device sampler null 27 28 def is_color_attachment = 29 usage.contains ImageUsageFlags/ColorAttachment 30 31 def is_depth_attachment = 32 usage.contains ImageUsageFlags/DepthStencilAttachment 33 34 def aspect_mask = 35 if is_depth_attachment then 36 if has_stencil format 37 then ImageAspectFlags/Depth | ImageAspectFlags/Stencil 38 else ImageAspectFlags/Depth 39 else 40 ImageAspectFlags/Color 41 42 def subresource_range = ImageSubresourceRange 43 =aspect_mask 44 =base_mip_level 45 level_count = mip_levels 46 base_array_layer = base_layer 47 layer_count = array_layers 48 49 def barrier_to self (layout : ImageLayout) = ImageMemoryBarrier 50 old_layout = self.layout 51 new_layout = layout 52 image = self.object 53 subresource_range = self.subresource_range 54 f@ ImageMemoryBarrier.default 55 56 object ComponentMapping = 57 val default = ComponentMapping 58 r = ComponentSwizzle/R 59 g = ComponentSwizzle/G 60 b = ComponentSwizzle/B 61 a = ComponentSwizzle/A 62