use glam::{Mat4, Vec2, Vec3}; use vulkano::buffer::BufferContents; // binary compatible mat4 which could be transparently used by vulkano BufferContents #[repr(C)] #[derive(Clone, Copy, Debug, PartialEq, BufferContents)] pub struct WMat4(pub [f32; 16]); impl WMat4 { pub fn from_glam(mat: &Mat4) -> Self { Self(*mat.as_ref()) } } impl Default for WMat4 { fn default() -> Self { Self(*Mat4::IDENTITY.as_ref()) } } // works just like CSS transform-origin 50% 50% pub fn centered_matrix(box_size: Vec2, input: &Mat4) -> Mat4 { Mat4::from_translation(Vec3::new(box_size.x / 2.0, box_size.y / 2.0, 0.0)) * *input * Mat4::from_translation(Vec3::new(-box_size.x / 2.0, -box_size.y / 2.0, 0.0)) }