summary refs log tree commit diff
path: root/src/linear_algebra.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/linear_algebra.rs')
-rw-r--r--src/linear_algebra.rs53
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]
   }
 }