use format;
use {Primitive};
pub type Location = u32;
pub type BufferIndex = u32;
pub type ElemOffset = u32;
pub type ElemStride = u32;
pub type InstanceRate = u8;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Element<F> {
pub format: F,
pub offset: ElemOffset,
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct VertexBufferDesc {
pub binding: BufferIndex,
pub stride: ElemStride,
pub rate: InstanceRate,
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct AttributeDesc {
pub location: Location,
pub binding: BufferIndex,
pub element: Element<format::Format>,
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum PrimitiveRestart {
Disabled,
U16,
U32,
}
#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct InputAssemblerDesc {
pub primitive: Primitive,
pub primitive_restart: PrimitiveRestart,
}
impl InputAssemblerDesc {
pub fn new(primitive: Primitive) -> Self {
InputAssemblerDesc {
primitive,
primitive_restart: PrimitiveRestart::Disabled,
}
}
}