79 lines
No EOL
2.2 KiB
Rust
79 lines
No EOL
2.2 KiB
Rust
use vulkanalia::prelude::v1_0::*;
|
|
|
|
use std::hash::{Hash, Hasher};
|
|
use std::mem::size_of;
|
|
|
|
use cgmath;
|
|
|
|
type Vec2 = cgmath::Vector2<f32>;
|
|
type Vec3 = cgmath::Vector3<f32>;
|
|
|
|
#[repr(C)]
|
|
#[derive(Copy, Clone, Debug)]
|
|
pub struct Vertex {
|
|
pub pos: Vec3,
|
|
pub color: Vec3,
|
|
pub tex_coord: Vec2,
|
|
}
|
|
|
|
impl Vertex {
|
|
pub const fn new(pos: Vec3, color: Vec3, tex_coord: Vec2) -> Self {
|
|
Self { pos, color, tex_coord }
|
|
}
|
|
|
|
pub fn binding_description() -> vk::VertexInputBindingDescription {
|
|
vk::VertexInputBindingDescription::builder()
|
|
.binding(0)
|
|
.stride(size_of::<Vertex>() as u32)
|
|
.input_rate(vk::VertexInputRate::VERTEX)
|
|
.build()
|
|
}
|
|
|
|
pub fn attribute_descriptions() -> [vk::VertexInputAttributeDescription; 3] {
|
|
let pos = vk::VertexInputAttributeDescription::builder()
|
|
.binding(0)
|
|
.location(0)
|
|
.format(vk::Format::R32G32B32_SFLOAT)
|
|
.offset(0)
|
|
.build();
|
|
|
|
let color = vk::VertexInputAttributeDescription::builder()
|
|
.binding(0)
|
|
.location(1)
|
|
.format(vk::Format::R32G32B32_SFLOAT)
|
|
.offset(size_of::<Vec2>() as u32)
|
|
.build();
|
|
|
|
let tex_coord = vk::VertexInputAttributeDescription::builder()
|
|
.binding(0)
|
|
.location(2)
|
|
.format(vk::Format::R32G32_SFLOAT)
|
|
.offset((size_of::<Vec2>() + size_of::<Vec3>()) as u32)
|
|
.build();
|
|
[pos, color, tex_coord]
|
|
}
|
|
}
|
|
|
|
|
|
impl PartialEq for Vertex {
|
|
fn eq(&self, other: &Self) -> bool {
|
|
self.pos == other.pos
|
|
&& self.color == other.color
|
|
&& self.tex_coord == other.tex_coord
|
|
}
|
|
}
|
|
|
|
impl Eq for Vertex {}
|
|
|
|
impl Hash for Vertex {
|
|
fn hash<H: Hasher>(&self, state: &mut H) {
|
|
self.pos[0].to_bits().hash(state);
|
|
self.pos[1].to_bits().hash(state);
|
|
self.pos[2].to_bits().hash(state);
|
|
self.color[0].to_bits().hash(state);
|
|
self.color[1].to_bits().hash(state);
|
|
self.color[2].to_bits().hash(state);
|
|
self.tex_coord[0].to_bits().hash(state);
|
|
self.tex_coord[1].to_bits().hash(state);
|
|
}
|
|
} |