mod vertex_attribute;
pub(crate) use self::vertex_attribute::{AttributeSize, BoneAttributes, VertexAttribute};
#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub enum VertexData {
Multi(MultiIndexVertexData),
Single(SingleIndexVertexData),
}
impl Default for VertexData {
fn default() -> Self {
VertexData::Multi(MultiIndexVertexData::default())
}
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Default)]
pub struct MultiIndexVertexData {
vertices_in_each_face: Vec<u8>,
bone_influences: Option<BoneInfluences>,
positions: VertexAttribute,
position_indices: Vec<u16>,
normals: VertexAttribute,
normal_indices: Vec<u16>,
uvs: Option<VertexAttribute>,
uv_indices: Option<Vec<u16>>,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Default)]
pub struct SingleIndexVertexData {
positions: VertexAttribute,
normals: VertexAttribute,
uvs: Option<VertexAttribute>,
bones: Option<BoneAttributes>,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Default)]
pub struct BoneInfluences {
bones_per_vertex: Vec<u8>,
bone_indices: Vec<u8>,
bone_weights: Vec<f32>,
}