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

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
}
}