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