use std::mem::size_of; use bytemuck::{Pod, Zeroable}; /// The vertices needed to form a square pub const SQUARE: [Vertex; 6] = [ Vertex::new(-0.5, -0.5), Vertex::new(0.5, -0.5), Vertex::new(-0.5, 0.5), Vertex::new(0.5, 0.5), Vertex::new(-0.5, 0.5), Vertex::new(0.5, -0.5), ]; #[repr(C)] #[derive(Copy, Clone, Debug, PartialEq, Pod, Zeroable)] pub struct Vertex { position: [f32; 2], } impl Vertex { const fn new(x: f32, y: f32) -> Self { Self { position: [x, y] } } } impl Vertex { // whenever this is updated, please also update `sprite.wgsl` pub(crate) const ATTRIBUTES: [wgpu::VertexAttribute; 1] = wgpu::vertex_attr_array![0 => Float32x2]; pub(crate) const fn desc<'a>() -> wgpu::VertexBufferLayout<'a> { wgpu::VertexBufferLayout { array_stride: size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Vertex, attributes: &Self::ATTRIBUTES, } } }