diff options
Diffstat (limited to 'src/linear_algebra.rs')
| -rw-r--r-- | src/linear_algebra.rs | 53 |
1 files changed, 34 insertions, 19 deletions
diff --git a/src/linear_algebra.rs b/src/linear_algebra.rs index 0051fa8..08e9306 100644 --- a/src/linear_algebra.rs +++ b/src/linear_algebra.rs @@ -30,10 +30,14 @@ impl Real for f32 { pub static VERTICES: [Vertex<f32>; 4] = [ - Vertex::new(Vec2::new(-0.5, -0.5), Vec3::new(1.0, 0.0, 0.0)), - Vertex::new(Vec2::new( 0.5, -0.5), Vec3::new(0.0, 1.0, 0.0)), - Vertex::new(Vec2::new( 0.5, 0.5), Vec3::new(0.0, 0.0, 1.0)), - Vertex::new(Vec2::new(-0.5, 0.5), Vec3::new(1.0, 1.0, 1.0)), + Vertex::new(Vec2::new(-0.5, -0.5), Vec3::new(1.0, 0.0, 0.0), + Vec2::new(1.0, 0.0)), + Vertex::new(Vec2::new( 0.5, -0.5), Vec3::new(0.0, 1.0, 0.0), + Vec2::new(0.0, 0.0)), + Vertex::new(Vec2::new( 0.5, 0.5), Vec3::new(0.0, 0.0, 1.0), + Vec2::new(0.0, 1.0)), + Vertex::new(Vec2::new(-0.5, 0.5), Vec3::new(1.0, 1.0, 1.0), + Vec2::new(1.0, 1.0)), ]; pub const INDICES: &[u16] = &[0, 1, 2, 2, 3, 0]; @@ -621,6 +625,7 @@ impl<T: Copy> Transformation<T> { pub struct Vertex<T: Copy> { pub position: Vec2<T>, pub color: Vec3<T>, + pub texture_coordinates: Vec2<T>, } #[repr(C)] @@ -633,8 +638,11 @@ pub struct UniformBlock<T: Copy> { } impl<T: Copy> Vertex<T> { - const fn new(position: Vec2<T>, color: Vec3<T>) -> Self { - Self { position, color } + const fn new(position: Vec2<T>, color: Vec3<T>, + texture_coordinates: Vec2<T>) + -> Self + { + Self { position, color, texture_coordinates } } pub fn binding_description() -> vk::VertexInputBindingDescription { @@ -646,23 +654,30 @@ impl<T: Copy> Vertex<T> { } pub fn attribute_descriptions() - -> [vk::VertexInputAttributeDescription; 2] + -> [vk::VertexInputAttributeDescription; 3] { let position = vk::VertexInputAttributeDescription::builder() - .binding(0) - .location(0) - .format(vk::Format::R32G32_SFLOAT) - .offset(0) - .build(); + .binding(0) + .location(0) + .format(vk::Format::R32G32_SFLOAT) + .offset(0) + .build(); let color = vk::VertexInputAttributeDescription::builder() - .binding(0) - .location(1) - .format(vk::Format::R32G32B32_SFLOAT) - .offset(size_of::<Vec2<f32>>() as u32) - .build(); - - [position, color] + .binding(0) + .location(1) + .format(vk::Format::R32G32B32_SFLOAT) + .offset(size_of::<Vec2<f32>>() as u32) + .build(); + + let texture_coordinates = vk::VertexInputAttributeDescription::builder() + .binding(0) + .location(2) + .format(vk::Format::R32G32_SFLOAT) + .offset((size_of::<Vec2<f32>>() + size_of::<Vec3<f32>>()) as u32) + .build(); + + [position, color, texture_coordinates] } } |