wgpu_quick_start/
buffers.rs

1use bytemuck::NoUninit;
2use wgpu::util::DeviceExt;
3
4/// create a vertex buffer from the given vertices
5pub fn create_vertex_buffer<T>(device: &wgpu::Device, vertices: Vec<T>) -> wgpu::Buffer
6where
7    T: NoUninit,
8{
9    device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
10        label: None,
11        contents: bytemuck::cast_slice(&vertices),
12        usage: wgpu::BufferUsages::VERTEX,
13    })
14}
15
16/// create an index buffer from the given vertices and indices
17pub fn create_index_buffer<T>(
18    device: &wgpu::Device,
19    vertices: Vec<T>,
20    indices: Vec<u16>,
21) -> (wgpu::Buffer, wgpu::Buffer)
22where
23    T: NoUninit,
24{
25    let vertex_buffer = create_vertex_buffer(device, vertices);
26
27    let index_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
28        label: None,
29        contents: bytemuck::cast_slice(&indices),
30        usage: wgpu::BufferUsages::INDEX,
31    });
32    (vertex_buffer, index_buffer)
33}