1 type BufferType = 2 | Vertex 3 | Index 4 | Storage 5 | Image 6 | Uniform 7 8 type Buffer @abstract = 9 val type : BufferType 10 var object : VkBuffer 11 var size : u32 12 val offset : u64 13 val usage : BufferUsageFlags 14 15 def info = DescriptorBufferInfo 16 buffer = object 17 offset = offset 18 range = size as u64 19 20 type ResizeBuffer @abstract = 21 inherit Buffer object = null 22 offset = 0 23 size = 0 24 25 let physical_device : VkPhysicalDevice 26 let device : VkDevice 27 var memory : VkMemory = null 28 let mut prev_object : VkBuffer = null 29 let mut prev_memory : VkMemory = null 30 31 def ensure_size self (size : u32) = 32 if self.size < size then 33 if self.prev_object <> null then 34 vk/destroy_buffer self.device self.prev_object null 35 vk/free_memory self.device self.prev_memory null 36 37 self.prev_object = self.object 38 self.prev_memory = self.memory 39 let adjusted_size = if self.size <> 0 40 then size as f32 * 1.5 |> as<u32> 41 else size 42 43 let (buffer, memory) = 44 buffer/create self.physical_device self.device adjusted_size.as<u64> 45 self.usage MemoryPropertyFlags/DeviceLocal 46 47 self.size = adjusted_size 48 object = buffer 49 memory = memory 50 51 def discard = 52 if prev_object <> null then 53 vk/destroy_buffer device prev_object null 54 vk/free_memory device prev_memory null 55 56 vk/destroy_buffer device object null 57 vk/free_memory device memory null 58