private void createIndexBuffer() { var size = Marshal.SizeOf(typeof(short)) * this.indices.Count; var transferUsage = Vk.BufferUsageFlags.TransferSrc; var indexUsage = Vk.BufferUsageFlags.IndexBuffer | Vk.BufferUsageFlags.TransferDst; var transferMemoryProps = Vk.MemoryPropertyFlags.DeviceLocal; var indexMemoryProps = Vk.MemoryPropertyFlags.HostVisible | Vk.MemoryPropertyFlags.HostCoherent; var sharingMode = this.GetSharingMode(); BufferWithMemory stagingBuffer; try { stagingBuffer = VkHelper.CreateBuffer(this, size, transferUsage, transferMemoryProps, sharingMode); } catch (Vk.ResultException result) { throw new VkException("An error occurred while creating the staging buffer.", result); } IntPtr memory = this.Device.MapMemory(stagingBuffer.Memory, 0, size); var indexArray = this.indices.ToArray(); MemoryManagement.ArrayToPtr <short>(indexArray, memory, false); this.Device.UnmapMemory(stagingBuffer.Memory); try { BufferWithMemory indexBuffer = VkHelper.CreateBuffer(this, size, indexUsage, indexMemoryProps, sharingMode); this.vkIndexBuffer = indexBuffer.Buffer; this.vkIndexBufferMemory = indexBuffer.Memory; } catch (Vk.ResultException result) { throw new VkException("An error occurred while creating the index buffer.", result); } VkHelper.CopyBuffer(stagingBuffer.Buffer, this.vkIndexBuffer, size, this); stagingBuffer.Destroy(this.Device); }