diff options
| author | Irene Knapp <ireneista@irenes.space> | 2026-07-18 03:48:13 -0700 |
|---|---|---|
| committer | Irene Knapp <ireneista@irenes.space> | 2026-07-18 03:48:13 -0700 |
| commit | 0371c8f086008d604dddfe92d021f8ecfe398436 (patch) | |
| tree | 74c21e5fea53a71937b26b8bbfac7ee784355f6c /src/shader_data.rs | |
| parent | 40bd889e67d6f9fb4ce837fcda4ddf5a34c54b47 (diff) | |
pull the shader data stuff into its own file
separate from the linear algebra stuff Force-Push: yes Change-Id: I26fc7ac596f304fa35ca7a4d0e1349d4fa0685ee
Diffstat (limited to 'src/shader_data.rs')
| -rw-r--r-- | src/shader_data.rs | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/shader_data.rs b/src/shader_data.rs new file mode 100644 index 0000000..404d5fb --- /dev/null +++ b/src/shader_data.rs @@ -0,0 +1,82 @@ +#![forbid(unsafe_code)] +use crate::linear_algebra::{ Vec2, Vec3, Mat4, Transformation }; + +use std::mem::size_of; +use vulkanalia::vk::{ self, HasBuilder }; + + +pub static VERTICES: [Vertex<f32>; 4] = [ + 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]; + + +#[repr(C)] +#[derive(Clone, Debug)] +pub struct Vertex<T: Copy> { + pub position: Vec2<T>, + pub color: Vec3<T>, + pub texture_coordinates: Vec2<T>, +} + +#[repr(C)] +#[derive(Clone, Debug)] +pub struct UniformBlock<T: Copy> { + pub scale: Vec3<T>, + pub model: Transformation<T>, + pub view: Transformation<T>, + pub projection: Mat4<T>, +} + +impl<T: Copy> Vertex<T> { + 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 { + vk::VertexInputBindingDescription::builder() + .binding(0) + .stride(size_of::<Vertex<f32>>() as u32) + .input_rate(vk::VertexInputRate::VERTEX) + .build() + } + + pub fn attribute_descriptions() + -> [vk::VertexInputAttributeDescription; 3] + { + let position = vk::VertexInputAttributeDescription::builder() + .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(); + + 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] + } +} + |