use crate::color::Color;
#[repr(C)]
#[derive(Clone, Copy, bytemuck::Pod, bytemuck::Zeroable, Debug)]
pub struct Mesh3DVertex {
pub position: [f32; 3],
pub normal: [f32; 3],
pub uv: [f32; 2],
}
impl Mesh3DVertex {
pub fn new(position: glam::Vec3, normal: glam::Vec3, uv: glam::Vec2) -> Self {
Self {
position: position.to_array(),
normal: normal.to_array(),
uv: uv.to_array(),
}
}
}
#[repr(C)]
#[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
pub struct InstanceData {
pub model: [[f32; 4]; 4],
pub color: [f32; 4],
}
impl InstanceData {
pub fn new(model: glam::Mat4, color: Color) -> Self {
Self {
model: model.to_cols_array_2d(),
color: [color.r, color.g, color.b, color.a],
}
}
pub fn from_position(position: glam::Vec3) -> Self {
Self::new(glam::Mat4::from_translation(position), crate::color::WHITE)
}
pub fn from_position_color(position: glam::Vec3, color: Color) -> Self {
Self::new(glam::Mat4::from_translation(position), color)
}
}