mod cgmath;
mod core;
pub use storm_macro::uniform;
pub unsafe trait Std140Element: Copy {}
pub unsafe trait Std140Struct: Copy {}
#[repr(C, align(4))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct float {
pub x: f32,
}
unsafe impl Std140Element for float {}
impl float {
pub const fn zero() -> Self {
Self::fill(0.0)
}
pub const fn fill(v: f32) -> Self {
Self {
x: v,
}
}
}
#[repr(C, align(8))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct vec2 {
pub x: f32,
pub y: f32,
}
unsafe impl Std140Element for vec2 {}
impl vec2 {
pub const fn zero() -> Self {
Self::fill(0.0)
}
pub const fn fill(v: f32) -> Self {
Self {
x: v,
y: v,
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct vec3 {
pub x: f32,
pub y: f32,
pub z: f32,
}
unsafe impl Std140Element for vec3 {}
unsafe impl Std140Struct for vec3 {}
impl vec3 {
pub const fn zero() -> Self {
Self::fill(0.0)
}
pub const fn fill(v: f32) -> Self {
Self {
x: v,
y: v,
z: v,
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct vec4 {
pub x: f32,
pub y: f32,
pub z: f32,
pub w: f32,
}
unsafe impl Std140Element for vec4 {}
unsafe impl Std140Struct for vec4 {}
impl vec4 {
pub const fn zero() -> Self {
Self::fill(0.0)
}
pub const fn fill(v: f32) -> Self {
Self {
x: v,
y: v,
z: v,
w: v,
}
}
}
#[repr(C, align(4))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct int {
pub x: i32,
}
unsafe impl Std140Element for int {}
impl int {
pub const fn zero() -> Self {
Self::fill(0)
}
pub const fn fill(v: i32) -> Self {
Self {
x: v,
}
}
}
#[repr(C, align(8))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct ivec2 {
pub x: i32,
pub y: i32,
}
unsafe impl Std140Element for ivec2 {}
impl ivec2 {
pub const fn zero() -> Self {
Self::fill(0)
}
pub const fn fill(v: i32) -> Self {
Self {
x: v,
y: v,
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct ivec3 {
pub x: i32,
pub y: i32,
pub z: i32,
}
unsafe impl Std140Element for ivec3 {}
unsafe impl Std140Struct for ivec3 {}
impl ivec3 {
pub const fn zero() -> Self {
Self::fill(0)
}
pub const fn fill(v: i32) -> Self {
Self {
x: v,
y: v,
z: v,
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct ivec4 {
pub x: i32,
pub y: i32,
pub z: i32,
pub w: i32,
}
unsafe impl Std140Element for ivec4 {}
unsafe impl Std140Struct for ivec4 {}
impl ivec4 {
pub const fn zero() -> Self {
Self::fill(0)
}
pub const fn fill(v: i32) -> Self {
Self {
x: v,
y: v,
z: v,
w: v,
}
}
}
#[repr(C, align(4))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct uint {
pub x: u32,
}
unsafe impl Std140Element for uint {}
impl uint {
pub const fn zero() -> Self {
Self {
x: 0,
}
}
pub const fn fill(v: u32) -> Self {
Self {
x: v,
}
}
}
#[repr(C, align(8))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct uvec2 {
pub x: u32,
pub y: u32,
}
unsafe impl Std140Element for uvec2 {}
impl uvec2 {
pub const fn zero() -> Self {
Self::fill(0)
}
pub const fn fill(v: u32) -> Self {
Self {
x: v,
y: v,
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct uvec3 {
pub x: u32,
pub y: u32,
pub z: u32,
}
unsafe impl Std140Element for uvec3 {}
unsafe impl Std140Struct for uvec3 {}
impl uvec3 {
pub const fn zero() -> Self {
Self::fill(0)
}
pub const fn fill(v: u32) -> Self {
Self {
x: v,
y: v,
z: v,
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct uvec4 {
pub x: u32,
pub y: u32,
pub z: u32,
pub w: u32,
}
unsafe impl Std140Element for uvec4 {}
unsafe impl Std140Struct for uvec4 {}
impl uvec4 {
pub const fn zero() -> Self {
Self::fill(0)
}
pub const fn fill(v: u32) -> Self {
Self {
x: v,
y: v,
z: v,
w: v,
}
}
}
#[repr(u32)]
#[derive(Clone, Copy, PartialEq, Debug)]
pub enum boolean {
True,
False,
}
#[repr(C, align(8))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct bvec2 {
pub x: boolean,
pub y: boolean,
}
unsafe impl Std140Element for bvec2 {}
impl bvec2 {
pub const fn falsey() -> Self {
Self::fill(boolean::False)
}
pub const fn truthy() -> Self {
Self::fill(boolean::True)
}
pub const fn fill(v: boolean) -> Self {
Self {
x: v,
y: v,
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct bvec3 {
pub x: boolean,
pub y: boolean,
pub z: boolean,
}
unsafe impl Std140Element for bvec3 {}
unsafe impl Std140Struct for bvec3 {}
impl bvec3 {
pub const fn falsey() -> Self {
Self::fill(boolean::False)
}
pub const fn truthy() -> Self {
Self::fill(boolean::True)
}
pub const fn fill(v: boolean) -> Self {
Self {
x: v,
y: v,
z: v,
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct bvec4 {
pub x: boolean,
pub y: boolean,
pub z: boolean,
pub w: boolean,
}
unsafe impl Std140Element for bvec4 {}
unsafe impl Std140Struct for bvec4 {}
impl bvec4 {
pub const fn falsey() -> Self {
Self::fill(boolean::False)
}
pub const fn truthy() -> Self {
Self::fill(boolean::True)
}
pub const fn fill(v: boolean) -> Self {
Self {
x: v,
y: v,
z: v,
w: v,
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct mat2 {
pub x: vec4,
pub y: vec4,
}
unsafe impl Std140Element for mat2 {}
unsafe impl Std140Struct for mat2 {}
impl mat2 {
pub const fn zero() -> Self {
Self::fill(0.0)
}
pub const fn fill(v: f32) -> Self {
Self {
x: vec4::fill(v),
y: vec4::fill(v),
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct mat3 {
pub x: vec4,
pub y: vec4,
pub z: vec4,
}
unsafe impl Std140Element for mat3 {}
unsafe impl Std140Struct for mat3 {}
impl mat3 {
pub const fn zero() -> Self {
Self::fill(0.0)
}
pub const fn fill(v: f32) -> Self {
Self {
x: vec4::fill(v),
y: vec4::fill(v),
z: vec4::fill(v),
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct mat4 {
pub x: vec4,
pub y: vec4,
pub z: vec4,
pub w: vec4,
}
unsafe impl Std140Element for mat4 {}
unsafe impl Std140Struct for mat4 {}
unsafe impl<const N: usize> Std140Element for [mat4; N] {}
unsafe impl<const N: usize> Std140Struct for [mat4; N] {}
impl mat4 {
pub const fn zero() -> Self {
Self::fill(0.0)
}
pub const fn fill(v: f32) -> Self {
Self {
x: vec4::fill(v),
y: vec4::fill(v),
z: vec4::fill(v),
w: vec4::fill(v),
}
}
}