mod interleave;
pub use self::interleave::*;
#[derive(Debug, Serialize, Deserialize, PartialEq, Default)]
pub struct SingleIndexedVertexAttributes {
pub(crate) indices: Vec<u16>,
pub(crate) vertices: Vec<Vertex>,
}
#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct Vertex {
pub(crate) position: [f32; 3],
pub(crate) normal: Option<[f32; 3]>,
pub(crate) face_tangent: Option<[f32; 3]>,
pub(crate) uv: Option<[f32; 2]>,
pub(crate) bones: Option<[BoneInfluence; 4]>,
}
impl Vertex {
pub fn position(&self) -> [f32; 3] {
self.position
}
pub fn normal(&self) -> Option<[f32; 3]> {
self.normal
}
pub fn face_tangent(&self) -> Option<[f32; 3]> {
self.face_tangent
}
pub fn uv(&self) -> Option<[f32; 2]> {
self.uv
}
pub fn bones(&self) -> Option<[BoneInfluence; 4]> {
self.bones
}
}
#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
pub struct BoneInfluence {
pub(crate) bone_idx: u8,
pub(crate) weight: f32,
}
impl BoneInfluence {
pub fn bone_idx(&self) -> u8 {
self.bone_idx
}
pub fn weight(&self) -> f32 {
self.weight
}
}
impl SingleIndexedVertexAttributes {
pub fn indices(&self) -> &Vec<u16> {
&self.indices
}
pub fn vertices(&self) -> &Vec<Vertex> {
&self.vertices
}
pub(crate) fn vertices_mut(&mut self) -> &mut Vec<Vertex> {
&mut self.vertices
}
}