Skip to main content

easy_gpu/assets/render/
mesh.rs

1use wgpu::Device;
2use wgpu::util::DeviceExt;
3use crate::assets::vertex_layout::GpuVertex;
4
5pub struct Mesh {
6    pub vertex_buffer: wgpu::Buffer,
7    pub index_buffer: wgpu::Buffer,
8    pub index_count: u32,
9}
10
11impl Mesh {
12    pub fn new<T: GpuVertex>(
13        device: &Device,
14        vertices: &[T],
15        indices: &[u16],
16    ) -> Self {
17        let vertex_buffer = device.create_buffer_init(
18            &wgpu::util::BufferInitDescriptor {
19                label: Some("vertex buffer"),
20                contents: bytemuck::cast_slice(vertices),
21                usage: wgpu::BufferUsages::VERTEX,
22            }
23        );
24
25        let index_buffer = device.create_buffer_init(
26            &wgpu::util::BufferInitDescriptor {
27                label: Some("index buffer"),
28                contents: bytemuck::cast_slice(indices),
29                usage: wgpu::BufferUsages::INDEX,
30            }
31        );
32
33        Self {
34            vertex_buffer,
35            index_buffer,
36            index_count: indices.len() as u32,
37        }
38    }
39}