use crate::vertex::Vertex; use wgpu::util::DeviceExt; pub struct Mesh { pub vertex_buffer: wgpu::Buffer, pub index_buffer: Option, pub num_vertices: u32, pub num_indices: u32, } impl Mesh { pub fn new(device: &wgpu::Device, vertices: &[Vertex], indices: Option<&[u16]>) -> Self { let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("Mesh Vertex Buffer"), contents: bytemuck::cast_slice(vertices), usage: wgpu::BufferUsages::VERTEX, }); let (index_buffer, num_indices) = if let Some(data) = indices { let buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { label: Some("Mesh Index Buffer"), usage: wgpu::BufferUsages::INDEX, contents: bytemuck::cast_slice(data), }); (Some(buffer), data.len() as u32) } else { (None, 0) }; Self { vertex_buffer, index_buffer, num_vertices: vertices.len() as u32, num_indices, } } }