summaryrefslogtreecommitdiff
path: root/render/src/vertex.rs
blob: 570eec47f7d7ced0cf6e19a5de01272729443ad8 (plain)
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),
];

/// A vertex that is usable by the alligator shader
#[repr(C)]
#[derive(Copy, Clone, Debug, PartialEq, Pod, Zeroable)]
pub struct Vertex {
	position: [f32; 2],
}

impl Vertex {
	// whenever this is updated, please also update `sprite.wgsl`
	pub(crate) const ATTRIBUTES: [wgpu::VertexAttribute; 1] =
		wgpu::vertex_attr_array![0 => Float32x2];

	/// Create a new vertex
	const fn new(x: f32, y: f32) -> Self {
		Self { position: [x, y] }
	}

	pub(crate) const fn desc<'a>() -> wgpu::VertexBufferLayout<'a> {
		wgpu::VertexBufferLayout {
			array_stride: size_of::<Self>() as wgpu::BufferAddress,
			step_mode: wgpu::VertexStepMode::Vertex,
			attributes: &Self::ATTRIBUTES,
		}
	}
}