38 lines
1.1 KiB
Rust
38 lines
1.1 KiB
Rust
use std::sync::Arc;
|
|
use vulkano::Validated;
|
|
use vulkano::buffer::{
|
|
AllocateBufferError, Buffer, BufferContents, BufferCreateInfo, BufferUsage, Subbuffer,
|
|
};
|
|
use vulkano::memory::allocator::{AllocationCreateInfo, MemoryTypeFilter, StandardMemoryAllocator};
|
|
use vulkano::pipeline::graphics::vertex_input::Vertex;
|
|
|
|
#[derive(BufferContents, Vertex)]
|
|
#[repr(C)]
|
|
pub struct Vertex2D {
|
|
#[format(R32G32_SFLOAT)]
|
|
pub position: [f32; 2],
|
|
|
|
#[format(R32G32B32_SFLOAT)]
|
|
pub color: [f32; 3],
|
|
}
|
|
|
|
impl Vertex2D {
|
|
pub fn create_buffer(
|
|
vertices: Vec<Vertex2D>,
|
|
memory_allocator: &Arc<StandardMemoryAllocator>,
|
|
) -> Result<Subbuffer<[Vertex2D]>, Validated<AllocateBufferError>> {
|
|
Buffer::from_iter(
|
|
memory_allocator.clone(),
|
|
BufferCreateInfo {
|
|
usage: BufferUsage::VERTEX_BUFFER,
|
|
..Default::default()
|
|
},
|
|
AllocationCreateInfo {
|
|
memory_type_filter: MemoryTypeFilter::PREFER_DEVICE
|
|
| MemoryTypeFilter::HOST_SEQUENTIAL_WRITE,
|
|
..Default::default()
|
|
},
|
|
vertices,
|
|
)
|
|
}
|
|
}
|