You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
1.9 KiB
Rust
121 lines
1.9 KiB
Rust
use nalgebra_glm::{Vec2, Vec3, Vec4};
|
|
|
|
pub trait TypeResolver {
|
|
fn type_of() -> u32;
|
|
fn amount_of() -> u32;
|
|
fn get_type_descriptor() -> TypeDescriptor {
|
|
TypeDescriptor {
|
|
gl_type: Self::type_of(),
|
|
amount: Self::amount_of(),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Copy, Clone)]
|
|
pub struct TypeDescriptor {
|
|
pub gl_type: u32,
|
|
pub amount: u32,
|
|
}
|
|
|
|
pub fn type_descriptor_of<T: TypeResolver>() -> TypeDescriptor {
|
|
T::get_type_descriptor()
|
|
}
|
|
|
|
pub fn type_of<T: TypeResolver>() -> u32 {
|
|
T::type_of()
|
|
}
|
|
|
|
pub fn amount_of<T: TypeResolver>() -> u32 {
|
|
T::amount_of()
|
|
}
|
|
|
|
impl TypeResolver for bool {
|
|
fn type_of() -> u32 {
|
|
gl::UNSIGNED_BYTE
|
|
}
|
|
fn amount_of() -> u32 {
|
|
1
|
|
}
|
|
}
|
|
|
|
impl TypeResolver for u8 {
|
|
fn type_of() -> u32 {
|
|
gl::UNSIGNED_BYTE
|
|
}
|
|
fn amount_of() -> u32 {
|
|
1
|
|
}
|
|
}
|
|
|
|
impl TypeResolver for i8 {
|
|
fn type_of() -> u32 {
|
|
gl::BYTE
|
|
}
|
|
fn amount_of() -> u32 {
|
|
1
|
|
}
|
|
}
|
|
|
|
impl TypeResolver for u16 {
|
|
fn type_of() -> u32 {
|
|
gl::UNSIGNED_SHORT
|
|
}
|
|
fn amount_of() -> u32 {
|
|
1
|
|
}
|
|
}
|
|
|
|
impl TypeResolver for i16 {
|
|
fn type_of() -> u32 {
|
|
gl::SHORT
|
|
}
|
|
fn amount_of() -> u32 {
|
|
1
|
|
}
|
|
}
|
|
|
|
impl TypeResolver for u32 {
|
|
fn type_of() -> u32 {
|
|
gl::UNSIGNED_INT
|
|
}
|
|
fn amount_of() -> u32 {
|
|
1
|
|
}
|
|
}
|
|
|
|
impl TypeResolver for i32 {
|
|
fn type_of() -> u32 {
|
|
gl::INT
|
|
}
|
|
fn amount_of() -> u32 {
|
|
1
|
|
}
|
|
}
|
|
|
|
impl TypeResolver for Vec2 {
|
|
fn type_of() -> u32 {
|
|
gl::FLOAT
|
|
}
|
|
fn amount_of() -> u32 {
|
|
2
|
|
}
|
|
}
|
|
|
|
impl TypeResolver for Vec3 {
|
|
fn type_of() -> u32 {
|
|
gl::FLOAT
|
|
}
|
|
fn amount_of() -> u32 {
|
|
3
|
|
}
|
|
}
|
|
|
|
impl TypeResolver for Vec4 {
|
|
fn type_of() -> u32 {
|
|
gl::FLOAT
|
|
}
|
|
fn amount_of() -> u32 {
|
|
4
|
|
}
|
|
}
|