use std::{marker::PhantomData, sync::Arc};
#[derive(Clone, Copy)]
pub struct Attribute {
pub size: usize,
pub offset: usize,
}
pub trait AttributeDescriptor {
fn get_attributes() -> &'static [Attribute];
}
pub struct Mesh<V: AttributeDescriptor, I> {
#[allow(missing_docs)]
pub vertices: Vec<V>,
#[allow(missing_docs)]
pub indices: Vec<I>,
}
impl<V: AttributeDescriptor, I> Mesh<V, I> {
pub(crate) fn size(&self) -> u64 {
self.vertices.len() as u64 * size_of::<V>() as u64
+ self.indices.len() as u64 * size_of::<I>() as u64
}
}
pub struct MeshBuffer<V: AttributeDescriptor, I> {
pub(crate) inner: Arc<crate::object::MeshBufferProxy>,
_tp: PhantomData<(V, I)>,
}
impl<V: AttributeDescriptor, I> MeshBuffer<V, I> {
pub(crate) fn new(inner: Arc<crate::object::MeshBufferProxy>) -> Self {
Self {
inner,
_tp: PhantomData,
}
}
}