glium::implement_vertex!
[−]
[src]
macro_rules! implement_vertex { ($struct_name:ident, $($field_name:ident),+) => ( impl $crate::vertex::Vertex for $struct_name { #[inline] fn build_bindings() -> $crate::vertex::VertexFormat { use std::borrow::Cow; // TODO: use a &'static [] if possible Cow::Owned(vec![ $( ( Cow::Borrowed(stringify!($field_name)), { let dummy: &$struct_name = unsafe { ::std::mem::transmute(0usize) }; let dummy_field = &dummy.$field_name; let dummy_field: usize = unsafe { ::std::mem::transmute(dummy_field) }; dummy_field }, { fn attr_type_of_val<T: $crate::vertex::Attribute>(_: &T) -> $crate::vertex::AttributeType { <T as $crate::vertex::Attribute>::get_type() } let dummy: &$struct_name = unsafe { ::std::mem::transmute(0usize) }; attr_type_of_val(&dummy.$field_name) }, ) ),+ ]) } } ); ($struct_name:ident, $($field_name:ident),+,) => ( implement_vertex!($struct_name, $($field_name),+); ); }
Implements the glium::vertex::Vertex
trait for the given type.
The parameters must be the name of the struct and the names of its fields.
Example
#[derive(Copy, Clone)] struct Vertex { position: [f32; 3], tex_coords: [f32; 2], } implement_vertex!(Vertex, position, tex_coords);