use rapier2d::na::Matrix4;
#[repr(C)]
#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
pub(crate) struct Vertex {
pub position: [f32; 2],
pub tex_coords: [f32; 2],
pub color: [f32; 4],
}
impl Vertex {
pub fn desc<'a>() -> wgpu::VertexBufferLayout<'a> {
wgpu::VertexBufferLayout {
array_stride: std::mem::size_of::<Vertex>() as wgpu::BufferAddress,
step_mode: wgpu::VertexStepMode::Vertex,
attributes: &[
wgpu::VertexAttribute {
offset: 0,
shader_location: 0,
format: wgpu::VertexFormat::Float32x2,
},
wgpu::VertexAttribute {
offset: std::mem::size_of::<[f32; 2]>() as wgpu::BufferAddress,
shader_location: 1,
format: wgpu::VertexFormat::Float32x2,
},
wgpu::VertexAttribute {
offset: (std::mem::size_of::<[f32; 2]>() * 2) as wgpu::BufferAddress,
shader_location: 2,
format: wgpu::VertexFormat::Float32x4,
},
],
}
}
}
pub(crate) const VERTICES: &[Vertex] = &[
Vertex {
position: [-1.0, 1.0],
tex_coords: [0.0, 0.0],
color: [0.0, 0.0, 0.0, 1.0],
}, Vertex {
position: [-1.0, -1.0],
tex_coords: [0.0, 1.0],
color: [0.0, 0.0, 0.0, 1.0],
}, Vertex {
position: [1.0, -1.0],
tex_coords: [1.0, 1.0],
color: [0.0, 0.0, 0.0, 1.0],
}, Vertex {
position: [1.0, 1.0],
tex_coords: [1.0, 0.0],
color: [0.0, 0.0, 0.0, 1.0],
},
];
pub(crate) const INDICES: &[u16] = &[0, 1, 2, 0, 2, 3];
pub(crate) struct Camera2D {
pub view_height: u32,
pub view_width: u32,
}
impl Camera2D {
pub fn new(view_width: u32, view_height: u32) -> Self {
Self {
view_height,
view_width,
}
}
fn build_view_projection_matrix(&self) -> Matrix4<f32> {
let proj = Matrix4::new_orthographic(-1.0, 1.0, -1.0, 1.0, 0.0, 100.0);
return proj;
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
pub(crate) struct CameraUniform {
view_width: f32,
view_height: f32,
}
impl CameraUniform {
pub fn new(view_width: f32, view_height: f32) -> Self {
Self {
view_height,
view_width,
}
}
}