1    module draw
2    
3    def draw_blit (blit_images : List<BlitImage>) =
4        let vulkan : Vulkan @auto
5        begin_label "Blit"
6    
7        begin_for_swapchain Vector4.new
8    
9        for blit_image in blit_images do
10           let image = blit_image.image
11           assert image <> null
12   
13           if not vulkan.blit.image_descriptor_sets.contains image then
14               let descriptor_set = DescriptorSet.create
15                   [(image, vulkan.blit.sampler).to_descriptor "source"]
16                   vulkan.blit.pipeline_layout[0]
17   
18               vulkan.blit.image_descriptor_sets.add image descriptor_set
19   
20           let size = Vector2 x = vulkan.swapchain.width as f32
21                              y = vulkan.swapchain.height as f32
22   
23           bind_pipeline vulkan.blit.pipeline
24           bind_index_buffer vulkan.quad_index_buffer 0 6
25           bind_descriptor_set vulkan.blit.image_descriptor_sets[image] 0
26   
27           let push_constant = BlitPushConstant
28               rect = [blit_image.offset.x as f32 / size.x
29                       blit_image.offset.y as f32 / size.y
30                       blit_image.image.width as f32 / size.x
31                       blit_image.image.height as f32 / size.y]
32   
33           set_push_constant push_constant@ptr
34           draw
35   
36       end
37   
38       end_label
39