1 type CommandBuffer = 2 val instance : Instance 3 let command_buffers : List<VkCommandBuffer> 4 let scissors : mut List<Rect2D> 5 let mut index : u32 = 0 6 var object = command_buffers[index] 7 8 object CommandBuffer = 9 def create (count : u32) = 10 let instance : Instance @auto 11 let command_buffers = List<VkCommandBuffer>.new 12 let scissors = List<Rect2D>.new 13 for i = 0 until count do 14 let command_pool_create_info = CommandPoolCreateInfo 15 type = StructureType/CommandPoolCreateInfo 16 next = null 17 flags = CommandPoolCreateFlags/ResetCommandBuffer 18 queue_family_index = instance.graphics_queue_family_index 19 20 let mut command_pool = null 21 vk/create_command_pool instance.device command_pool_create_info@ptr 22 null command_pool@mut_ptr 23 |> assert_success 24 25 let allocate_info = CommandBufferAllocateInfo 26 type = StructureType/CommandBufferAllocateInfo 27 next = null 28 =command_pool 29 level = CommandBufferLevel/Primary 30 command_buffer_count = 1 31 32 let mut command_buffer = null 33 vk/allocate_command_buffers instance.device allocate_info@ptr 34 command_buffer@mut_ptr 35 |> assert_success 36 37 command_buffers.add command_buffer 38 scissors.add Rect2D@zero 39 40 let command_buffer_begin_info = CommandBufferBeginInfo 41 type = StructureType/CommandBufferBeginInfo 42 next = null 43 flags = CommandBufferUsageFlags/OneTimeSubmit 44 inheritance_info = null 45 46 vk/begin_command_buffer command_buffers[0] 47 command_buffer_begin_info@ptr 48 |> assert_success 49 50 CommandBuffer instance command_buffers scissors 51 52 type CommandBuffer 53 def end = 54 vk/end_command_buffer object 55 56 def scissor (rect : Rect2D) = 57 let command_buffer = command_buffers[index] 58 if scissors[index] <> rect then 59 scissors[index] = rect 60 vk/cmd_set_scissor command_buffer 0 1 (scissors.as_ptr + index) 61 62 def next_frame = 63 index = (index + 1) % command_buffers.size 64 object = command_buffers[index] 65 66 let command_buffer_begin_info = CommandBufferBeginInfo 67 type = StructureType/CommandBufferBeginInfo 68 next = null 69 flags = CommandBufferUsageFlags/OneTimeSubmit 70 inheritance_info = null 71 72 vk/begin_command_buffer object command_buffer_begin_info@ptr 73 |> assert_success 74