ajout mesh.rs
This commit is contained in:
+36
@@ -0,0 +1,36 @@
|
||||
use crate::vertex::Vertex;
|
||||
use wgpu::util::DeviceExt;
|
||||
|
||||
pub struct Mesh {
|
||||
pub vertex_buffer: wgpu::Buffer,
|
||||
pub index_buffer: Option<wgpu::Buffer>,
|
||||
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,
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user