polyscope_render/
buffer.rs1use wgpu::util::DeviceExt;
4
5pub fn create_vertex_buffer<T: bytemuck::Pod>(
7 device: &wgpu::Device,
8 data: &[T],
9 label: Option<&str>,
10) -> wgpu::Buffer {
11 device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
12 label,
13 contents: bytemuck::cast_slice(data),
14 usage: wgpu::BufferUsages::VERTEX | wgpu::BufferUsages::COPY_DST,
15 })
16}
17
18#[must_use]
20pub fn create_index_buffer(
21 device: &wgpu::Device,
22 data: &[u32],
23 label: Option<&str>,
24) -> wgpu::Buffer {
25 device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
26 label,
27 contents: bytemuck::cast_slice(data),
28 usage: wgpu::BufferUsages::INDEX | wgpu::BufferUsages::COPY_DST,
29 })
30}
31
32pub fn create_uniform_buffer<T: bytemuck::Pod>(
34 device: &wgpu::Device,
35 data: &T,
36 label: Option<&str>,
37) -> wgpu::Buffer {
38 device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
39 label,
40 contents: bytemuck::bytes_of(data),
41 usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
42 })
43}
44
45pub fn create_storage_buffer<T: bytemuck::Pod>(
47 device: &wgpu::Device,
48 data: &[T],
49 label: Option<&str>,
50) -> wgpu::Buffer {
51 device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
52 label,
53 contents: bytemuck::cast_slice(data),
54 usage: wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_DST,
55 })
56}
57
58pub fn update_buffer<T: bytemuck::Pod>(queue: &wgpu::Queue, buffer: &wgpu::Buffer, data: &[T]) {
60 queue.write_buffer(buffer, 0, bytemuck::cast_slice(data));
61}