#![allow(non_camel_case_types)]
use std::fmt;
use std::ops::{Deref, DerefMut, Index, IndexMut};
pub use std140_macros::repr_std140;
pub unsafe trait ReprStd140 {}
pub unsafe trait Std140ArrayElement: ReprStd140 {}
pub unsafe trait Std140Struct {}
unsafe impl<T> ReprStd140 for T where T: Std140Struct {}
unsafe impl<T> Std140ArrayElement for T where T: Std140Struct {}
#[derive(Clone, Copy)]
pub struct array<T, const LEN: usize>
where
T: Std140ArrayElement,
{
internal: [ArrayElementWrapper<T>; LEN],
}
impl<T, const LEN: usize> array<T, { LEN }>
where
T: Std140ArrayElement,
{
#[doc(hidden)]
pub fn from_wrapped(wrapped: [ArrayElementWrapper<T>; LEN]) -> Self {
array { internal: wrapped }
}
}
impl<T, const LEN: usize> PartialEq for array<T, { LEN }>
where
T: Std140ArrayElement + PartialEq,
{
fn eq(&self, other: &Self) -> bool {
for i in 0..LEN {
if self.internal[i] != other.internal[i] {
return false;
}
}
true
}
}
impl<T, const LEN: usize> fmt::Debug for array<T, { LEN }>
where
T: Std140ArrayElement + fmt::Debug,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_list().entries(self.internal.iter()).finish()
}
}
#[doc(hidden)]
#[derive(Clone, Copy, PartialEq, Eq, Hash)]
#[repr(C, align(16))]
pub struct ArrayElementWrapper<T>
where
T: Std140ArrayElement,
{
pub element: T,
}
impl<T> fmt::Debug for ArrayElementWrapper<T>
where
T: Std140ArrayElement + fmt::Debug,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
<T as fmt::Debug>::fmt(&self.element, f)
}
}
#[macro_export]
macro_rules! array {
($elem:expr; $n:expr) => {
$crate::array::from_wrapped([$crate::ArrayElementWrapper {
element: $elem
}; $n])
};
($($x:expr),*) => {
$crate::array::from_wrapped([
$(
$crate::ArrayElementWrapper {
element: $x
}
),*
])
};
($($x:expr,)*) => ($crate::array![$($x),*])
}
unsafe impl<T, const LEN: usize> ReprStd140 for array<T, { LEN }> where T: Std140ArrayElement {}
#[repr(C, align(4))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct float(pub f32);
unsafe impl ReprStd140 for float {}
unsafe impl Std140ArrayElement for float {}
#[repr(C, align(8))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct vec2(pub f32, pub f32);
impl vec2 {
pub fn zero() -> Self {
vec2(0.0, 0.0)
}
}
unsafe impl ReprStd140 for vec2 {}
unsafe impl Std140ArrayElement for vec2 {}
impl Index<usize> for vec2 {
type Output = f32;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for vec2 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct vec3(pub f32, pub f32, pub f32);
impl vec3 {
pub fn zero() -> Self {
vec3(0.0, 0.0, 0.0)
}
}
unsafe impl ReprStd140 for vec3 {}
unsafe impl Std140ArrayElement for vec3 {}
impl Index<usize> for vec3 {
type Output = f32;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
2 => &self.2,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for vec3 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
2 => &mut self.2,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct vec4(pub f32, pub f32, pub f32, pub f32);
impl vec4 {
pub fn zero() -> Self {
vec4(0.0, 0.0, 0.0, 0.0)
}
}
unsafe impl ReprStd140 for vec4 {}
unsafe impl Std140ArrayElement for vec4 {}
impl Index<usize> for vec4 {
type Output = f32;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
2 => &self.2,
3 => &self.3,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for vec4 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
2 => &mut self.2,
3 => &mut self.3,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(4))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct int(pub i32);
unsafe impl ReprStd140 for int {}
unsafe impl Std140ArrayElement for int {}
#[repr(C, align(8))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct ivec2(pub i32, pub i32);
impl ivec2 {
pub fn zero() -> Self {
ivec2(0, 0)
}
}
unsafe impl ReprStd140 for ivec2 {}
unsafe impl Std140ArrayElement for ivec2 {}
impl Index<usize> for ivec2 {
type Output = i32;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for ivec2 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct ivec3(pub i32, pub i32, pub i32);
impl ivec3 {
pub fn zero() -> Self {
ivec3(0, 0, 0)
}
}
unsafe impl ReprStd140 for ivec3 {}
unsafe impl Std140ArrayElement for ivec3 {}
impl Index<usize> for ivec3 {
type Output = i32;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
2 => &self.2,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for ivec3 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
2 => &mut self.2,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct ivec4(pub i32, pub i32, pub i32, pub i32);
impl ivec4 {
pub fn zero() -> Self {
ivec4(0, 0, 0, 0)
}
}
unsafe impl ReprStd140 for ivec4 {}
unsafe impl Std140ArrayElement for ivec4 {}
impl Index<usize> for ivec4 {
type Output = i32;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
2 => &self.2,
3 => &self.3,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for ivec4 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
2 => &mut self.2,
3 => &mut self.3,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(4))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct uint(pub u32);
unsafe impl ReprStd140 for uint {}
unsafe impl Std140ArrayElement for uint {}
#[repr(C, align(8))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct uvec2(pub u32, pub u32);
impl uvec2 {
pub fn zero() -> Self {
uvec2(0, 0)
}
}
unsafe impl ReprStd140 for uvec2 {}
unsafe impl Std140ArrayElement for uvec2 {}
impl Index<usize> for uvec2 {
type Output = u32;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for uvec2 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct uvec3(pub u32, pub u32, pub u32);
impl uvec3 {
pub fn zero() -> Self {
uvec3(0, 0, 0)
}
}
unsafe impl ReprStd140 for uvec3 {}
unsafe impl Std140ArrayElement for uvec3 {}
impl Index<usize> for uvec3 {
type Output = u32;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
2 => &self.2,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for uvec3 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
2 => &mut self.2,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct uvec4(pub u32, pub u32, pub u32, pub u32);
impl uvec4 {
pub fn zero() -> Self {
uvec4(0, 0, 0, 0)
}
}
unsafe impl ReprStd140 for uvec4 {}
unsafe impl Std140ArrayElement for uvec4 {}
impl Index<usize> for uvec4 {
type Output = u32;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
2 => &self.2,
3 => &self.3,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for uvec4 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
2 => &mut self.2,
3 => &mut self.3,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(u32)]
#[derive(Clone, Copy, PartialEq, Debug)]
pub enum boolean {
True = 1,
False = 0,
}
unsafe impl ReprStd140 for boolean {}
unsafe impl Std140ArrayElement for boolean {}
impl From<bool> for boolean {
fn from(value: bool) -> Self {
match value {
true => boolean::True,
false => boolean::False,
}
}
}
#[repr(C, align(8))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct bvec2(pub boolean, pub boolean);
unsafe impl ReprStd140 for bvec2 {}
unsafe impl Std140ArrayElement for bvec2 {}
impl Index<usize> for bvec2 {
type Output = boolean;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for bvec2 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct bvec3(pub boolean, pub boolean, pub boolean);
unsafe impl ReprStd140 for bvec3 {}
unsafe impl Std140ArrayElement for bvec3 {}
impl Index<usize> for bvec3 {
type Output = boolean;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
2 => &self.2,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for bvec3 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
2 => &mut self.2,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct bvec4(pub boolean, pub boolean, pub boolean, pub boolean);
unsafe impl ReprStd140 for bvec4 {}
unsafe impl Std140ArrayElement for bvec4 {}
impl Index<usize> for bvec4 {
type Output = boolean;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
2 => &self.2,
3 => &self.3,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for bvec4 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
2 => &mut self.2,
3 => &mut self.3,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(8))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct double(pub f64);
unsafe impl ReprStd140 for double {}
unsafe impl Std140ArrayElement for double {}
#[repr(C, align(16))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct dvec2(pub f64, pub f64);
impl dvec2 {
pub fn zero() -> Self {
dvec2(0.0, 0.0)
}
}
unsafe impl ReprStd140 for dvec2 {}
unsafe impl Std140ArrayElement for dvec2 {}
impl Index<usize> for dvec2 {
type Output = f64;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for dvec2 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(32))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct dvec3(pub f64, pub f64, pub f64);
impl dvec3 {
pub fn zero() -> Self {
dvec3(0.0, 0.0, 0.0)
}
}
unsafe impl ReprStd140 for dvec3 {}
unsafe impl Std140ArrayElement for dvec3 {}
impl Index<usize> for dvec3 {
type Output = f64;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
2 => &self.2,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for dvec3 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
2 => &mut self.2,
_ => panic!("Index out of bounds"),
}
}
}
#[repr(C, align(32))]
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct dvec4(pub f64, pub f64, pub f64, pub f64);
impl dvec4 {
pub fn zero() -> Self {
dvec4(0.0, 0.0, 0.0, 0.0)
}
}
unsafe impl ReprStd140 for dvec4 {}
unsafe impl Std140ArrayElement for dvec4 {}
impl Index<usize> for dvec4 {
type Output = f64;
fn index(&self, index: usize) -> &Self::Output {
match index {
0 => &self.0,
1 => &self.1,
2 => &self.2,
3 => &self.3,
_ => panic!("Index out of bounds"),
}
}
}
impl IndexMut<usize> for dvec4 {
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
match index {
0 => &mut self.0,
1 => &mut self.1,
2 => &mut self.2,
3 => &mut self.3,
_ => panic!("Index out of bounds"),
}
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct mat2x2 {
columns: array<vec2, 2>,
}
impl mat2x2 {
pub fn zero() -> Self {
mat2x2(vec2::zero(), vec2::zero())
}
}
pub fn mat2x2(c0: vec2, c1: vec2) -> mat2x2 {
mat2x2 {
columns: array![c0, c1],
}
}
unsafe impl ReprStd140 for mat2x2 {}
unsafe impl Std140ArrayElement for mat2x2 {}
impl Deref for mat2x2 {
type Target = array<vec2, 2>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for mat2x2 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for mat2x2 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("mat2x2{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct mat2x3 {
columns: array<vec3, 2>,
}
impl mat2x3 {
pub fn zero() -> Self {
mat2x3(vec3::zero(), vec3::zero())
}
}
pub fn mat2x3(c0: vec3, c1: vec3) -> mat2x3 {
mat2x3 {
columns: array![c0, c1],
}
}
unsafe impl ReprStd140 for mat2x3 {}
unsafe impl Std140ArrayElement for mat2x3 {}
impl Deref for mat2x3 {
type Target = array<vec3, 2>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for mat2x3 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for mat2x3 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("mat2x3{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct mat2x4 {
columns: array<vec4, 2>,
}
impl mat2x4 {
pub fn zero() -> Self {
mat2x4(vec4::zero(), vec4::zero())
}
}
pub fn mat2x4(c0: vec4, c1: vec4) -> mat2x4 {
mat2x4 {
columns: array![c0, c1],
}
}
unsafe impl ReprStd140 for mat2x4 {}
unsafe impl Std140ArrayElement for mat2x4 {}
impl Deref for mat2x4 {
type Target = array<vec4, 2>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for mat2x4 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for mat2x4 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("mat2x4{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct mat3x2 {
columns: array<vec2, 3>,
}
impl mat3x2 {
pub fn zero() -> Self {
mat3x2(vec2::zero(), vec2::zero(), vec2::zero())
}
}
pub fn mat3x2(c0: vec2, c1: vec2, c2: vec2) -> mat3x2 {
mat3x2 {
columns: array![c0, c1, c2],
}
}
unsafe impl ReprStd140 for mat3x2 {}
unsafe impl Std140ArrayElement for mat3x2 {}
impl Deref for mat3x2 {
type Target = array<vec2, 3>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for mat3x2 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for mat3x2 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("mat3x2{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct mat3x3 {
columns: array<vec3, 3>,
}
impl mat3x3 {
pub fn zero() -> Self {
mat3x3(vec3::zero(), vec3::zero(), vec3::zero())
}
}
pub fn mat3x3(c0: vec3, c1: vec3, c2: vec3) -> mat3x3 {
mat3x3 {
columns: array![c0, c1, c2],
}
}
unsafe impl ReprStd140 for mat3x3 {}
unsafe impl Std140ArrayElement for mat3x3 {}
impl Deref for mat3x3 {
type Target = array<vec3, 3>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for mat3x3 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for mat3x3 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("mat3x3{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct mat3x4 {
columns: array<vec4, 3>,
}
impl mat3x4 {
pub fn zero() -> Self {
mat3x4(vec4::zero(), vec4::zero(), vec4::zero())
}
}
pub fn mat3x4(c0: vec4, c1: vec4, c2: vec4) -> mat3x4 {
mat3x4 {
columns: array![c0, c1, c2],
}
}
unsafe impl ReprStd140 for mat3x4 {}
unsafe impl Std140ArrayElement for mat3x4 {}
impl Deref for mat3x4 {
type Target = array<vec4, 3>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for mat3x4 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for mat3x4 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("mat3x4{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct mat4x2 {
columns: array<vec2, 4>,
}
impl mat4x2 {
pub fn zero() -> Self {
mat4x2(vec2::zero(), vec2::zero(), vec2::zero(), vec2::zero())
}
}
pub fn mat4x2(c0: vec2, c1: vec2, c2: vec2, c3: vec2) -> mat4x2 {
mat4x2 {
columns: array![c0, c1, c2, c3],
}
}
unsafe impl ReprStd140 for mat4x2 {}
unsafe impl Std140ArrayElement for mat4x2 {}
impl Deref for mat4x2 {
type Target = array<vec2, 4>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for mat4x2 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for mat4x2 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("mat4x2{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct mat4x3 {
columns: array<vec3, 4>,
}
impl mat4x3 {
pub fn zero() -> Self {
mat4x3(vec3::zero(), vec3::zero(), vec3::zero(), vec3::zero())
}
}
pub fn mat4x3(c0: vec3, c1: vec3, c2: vec3, c3: vec3) -> mat4x3 {
mat4x3 {
columns: array![c0, c1, c2, c3],
}
}
unsafe impl ReprStd140 for mat4x3 {}
unsafe impl Std140ArrayElement for mat4x3 {}
impl Deref for mat4x3 {
type Target = array<vec3, 4>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for mat4x3 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for mat4x3 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("mat4x3{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct mat4x4 {
columns: array<vec4, 4>,
}
impl mat4x4 {
pub fn zero() -> Self {
mat4x4(vec4::zero(), vec4::zero(), vec4::zero(), vec4::zero())
}
}
pub fn mat4x4(c0: vec4, c1: vec4, c2: vec4, c3: vec4) -> mat4x4 {
mat4x4 {
columns: array![c0, c1, c2, c3],
}
}
unsafe impl ReprStd140 for mat4x4 {}
unsafe impl Std140ArrayElement for mat4x4 {}
impl Deref for mat4x4 {
type Target = array<vec4, 4>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for mat4x4 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for mat4x4 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("mat4x4{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct dmat2x2 {
columns: array<dvec2, 2>,
}
impl dmat2x2 {
pub fn zero() -> Self {
dmat2x2(dvec2::zero(), dvec2::zero())
}
}
pub fn dmat2x2(c0: dvec2, c1: dvec2) -> dmat2x2 {
dmat2x2 {
columns: array![c0, c1],
}
}
unsafe impl ReprStd140 for dmat2x2 {}
unsafe impl Std140ArrayElement for dmat2x2 {}
impl Deref for dmat2x2 {
type Target = array<dvec2, 2>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for dmat2x2 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for dmat2x2 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("dmat2x2{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct dmat2x3 {
columns: array<dvec3, 2>,
}
impl dmat2x3 {
pub fn zero() -> Self {
dmat2x3(dvec3::zero(), dvec3::zero())
}
}
pub fn dmat2x3(c0: dvec3, c1: dvec3) -> dmat2x3 {
dmat2x3 {
columns: array![c0, c1],
}
}
unsafe impl ReprStd140 for dmat2x3 {}
unsafe impl Std140ArrayElement for dmat2x3 {}
impl Deref for dmat2x3 {
type Target = array<dvec3, 2>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for dmat2x3 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for dmat2x3 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("dmat2x3{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct dmat2x4 {
columns: array<dvec4, 2>,
}
impl dmat2x4 {
pub fn zero() -> Self {
dmat2x4(dvec4::zero(), dvec4::zero())
}
}
pub fn dmat2x4(c0: dvec4, c1: dvec4) -> dmat2x4 {
dmat2x4 {
columns: array![c0, c1],
}
}
unsafe impl ReprStd140 for dmat2x4 {}
unsafe impl Std140ArrayElement for dmat2x4 {}
impl Deref for dmat2x4 {
type Target = array<dvec4, 2>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for dmat2x4 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for dmat2x4 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("dmat2x4{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct dmat3x2 {
columns: array<dvec2, 3>,
}
impl dmat3x2 {
pub fn zero() -> Self {
dmat3x2(dvec2::zero(), dvec2::zero(), dvec2::zero())
}
}
pub fn dmat3x2(c0: dvec2, c1: dvec2, c2: dvec2) -> dmat3x2 {
dmat3x2 {
columns: array![c0, c1, c2],
}
}
unsafe impl ReprStd140 for dmat3x2 {}
unsafe impl Std140ArrayElement for dmat3x2 {}
impl Deref for dmat3x2 {
type Target = array<dvec2, 3>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for dmat3x2 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for dmat3x2 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("dmat3x2{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct dmat3x3 {
columns: array<dvec3, 3>,
}
impl dmat3x3 {
pub fn zero() -> Self {
dmat3x3(dvec3::zero(), dvec3::zero(), dvec3::zero())
}
}
pub fn dmat3x3(c0: dvec3, c1: dvec3, c2: dvec3) -> dmat3x3 {
dmat3x3 {
columns: array![c0, c1, c2],
}
}
unsafe impl ReprStd140 for dmat3x3 {}
unsafe impl Std140ArrayElement for dmat3x3 {}
impl Deref for dmat3x3 {
type Target = array<dvec3, 3>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for dmat3x3 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for dmat3x3 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("dmat3x3{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct dmat3x4 {
columns: array<dvec4, 3>,
}
impl dmat3x4 {
pub fn zero() -> Self {
dmat3x4(dvec4::zero(), dvec4::zero(), dvec4::zero())
}
}
pub fn dmat3x4(c0: dvec4, c1: dvec4, c2: dvec4) -> dmat3x4 {
dmat3x4 {
columns: array![c0, c1, c2],
}
}
unsafe impl ReprStd140 for dmat3x4 {}
unsafe impl Std140ArrayElement for dmat3x4 {}
impl Deref for dmat3x4 {
type Target = array<dvec4, 3>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for dmat3x4 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for dmat3x4 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("dmat3x4{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct dmat4x2 {
columns: array<dvec2, 4>,
}
impl dmat4x2 {
pub fn zero() -> Self {
dmat4x2(dvec2::zero(), dvec2::zero(), dvec2::zero(), dvec2::zero())
}
}
pub fn dmat4x2(c0: dvec2, c1: dvec2, c2: dvec2, c3: dvec2) -> dmat4x2 {
dmat4x2 {
columns: array![c0, c1, c2, c3],
}
}
unsafe impl ReprStd140 for dmat4x2 {}
unsafe impl Std140ArrayElement for dmat4x2 {}
impl Deref for dmat4x2 {
type Target = array<dvec2, 4>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for dmat4x2 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for dmat4x2 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("dmat4x2{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct dmat4x3 {
columns: array<dvec3, 4>,
}
impl dmat4x3 {
pub fn zero() -> Self {
dmat4x3(dvec3::zero(), dvec3::zero(), dvec3::zero(), dvec3::zero())
}
}
pub fn dmat4x3(c0: dvec3, c1: dvec3, c2: dvec3, c3: dvec3) -> dmat4x3 {
dmat4x3 {
columns: array![c0, c1, c2, c3],
}
}
unsafe impl ReprStd140 for dmat4x3 {}
unsafe impl Std140ArrayElement for dmat4x3 {}
impl Deref for dmat4x3 {
type Target = array<dvec3, 4>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for dmat4x3 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for dmat4x3 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("dmat4x3{:?}", &self.columns))
}
}
#[derive(Clone, Copy, PartialEq)]
pub struct dmat4x4 {
columns: array<dvec4, 4>,
}
impl dmat4x4 {
pub fn zero() -> Self {
dmat4x4(dvec4::zero(), dvec4::zero(), dvec4::zero(), dvec4::zero())
}
}
pub fn dmat4x4(c0: dvec4, c1: dvec4, c2: dvec4, c3: dvec4) -> dmat4x4 {
dmat4x4 {
columns: array![c0, c1, c2, c3],
}
}
unsafe impl ReprStd140 for dmat4x4 {}
unsafe impl Std140ArrayElement for dmat4x4 {}
impl Deref for dmat4x4 {
type Target = array<dvec4, 4>;
fn deref(&self) -> &Self::Target {
&self.columns
}
}
impl DerefMut for dmat4x4 {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.columns
}
}
impl fmt::Debug for dmat4x4 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("dmat4x4{:?}", &self.columns))
}
}