#[cfg(any(
all(debug_assertions, feature = "debug-glam-assert"),
feature = "glam-assert"
))]
macro_rules! glam_assert {
($($arg:tt)*) => ( assert!($($arg)*); )
}
#[cfg(not(any(
all(debug_assertions, feature = "debug-glam-assert"),
feature = "glam-assert"
)))]
macro_rules! glam_assert {
($($arg:tt)*) => {};
}
macro_rules! const_assert {
($x:expr $(,)?) => {
#[cfg(not(target_arch = "spirv"))]
#[allow(unknown_lints, clippy::eq_op)]
const _: [(); 0 - !{
const ASSERT: bool = $x;
ASSERT
} as usize] = [];
};
}
macro_rules! const_assert_eq {
($x:expr, $y:expr $(,)?) => {
const_assert!($x == $y);
};
}
#[macro_export]
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
macro_rules! const_m128 {
($fx4:expr) => {
unsafe { $crate::cast::Vec4Cast { fx4: $fx4 }.m128 }
};
}
#[cfg(all(target_feature = "sse2", not(feature = "scalar-math")))]
macro_rules! const_f32x4 {
($fx4:expr) => {
unsafe { $crate::cast::Vec4Cast { fx4: $fx4 }.m128 }
};
}
#[cfg(all(target_feature = "simd128", not(feature = "scalar-math")))]
macro_rules! const_f32x4 {
($fx4:expr) => {
unsafe { $crate::cast::Vec4Cast { fx4: $fx4 }.v128 }
};
}
#[macro_export]
macro_rules! const_vec2 {
($fx2:expr) => {
unsafe { $crate::cast::Vec2Cast { fx2: $fx2 }.v2 }
};
}
#[macro_export]
macro_rules! const_vec3 {
($fx3:expr) => {
unsafe { $crate::cast::Vec3Cast { fx3: $fx3 }.v3 }
};
}
#[macro_export]
macro_rules! const_vec3a {
($fx3:expr) => {
unsafe {
$crate::cast::Vec4Cast {
fx4: [$fx3[0], $fx3[1], $fx3[2], 0.0],
}
.v3a
}
};
}
#[macro_export]
macro_rules! const_vec4 {
($fx4:expr) => {
unsafe { $crate::cast::Vec4Cast { fx4: $fx4 }.v4 }
};
}
#[macro_export]
macro_rules! const_mat2 {
($col0:expr, $col1:expr) => {
unsafe {
$crate::cast::Mat2Cast {
v2x2: [$crate::const_vec2!($col0), $crate::const_vec2!($col1)],
}
.m2
}
};
($fx4:expr) => {
$crate::const_mat2!(
$crate::cast::Vec4Cast { fx4: $fx4 }.fx2x2[0],
$crate::cast::Vec4Cast { fx4: $fx4 }.fx2x2[1]
)
};
}
#[macro_export]
macro_rules! const_mat3 {
($col0:expr, $col1:expr, $col2:expr) => {
unsafe {
$crate::cast::Mat3Cast {
v3x3: [
$crate::const_vec3!($col0),
$crate::const_vec3!($col1),
$crate::const_vec3!($col2),
],
}
.m3
}
};
($fx9:expr) => {
$crate::const_mat3!(
$crate::cast::F32x9Cast { fx9: $fx9 }.fx3x3[0],
$crate::cast::F32x9Cast { fx9: $fx9 }.fx3x3[1],
$crate::cast::F32x9Cast { fx9: $fx9 }.fx3x3[2]
)
};
}
#[macro_export]
macro_rules! const_mat3a {
($col0:expr, $col1:expr, $col2:expr) => {
unsafe {
$crate::cast::Mat3ACast {
v3x3: [
$crate::const_vec3a!($col0),
$crate::const_vec3a!($col1),
$crate::const_vec3a!($col2),
],
}
.m3
}
};
($fx9:expr) => {
$crate::const_mat3a!(
$crate::cast::F32x9Cast { fx9: $fx9 }.fx3x3[0],
$crate::cast::F32x9Cast { fx9: $fx9 }.fx3x3[1],
$crate::cast::F32x9Cast { fx9: $fx9 }.fx3x3[2]
)
};
}
#[macro_export]
macro_rules! const_mat4 {
($col0:expr, $col1:expr, $col2:expr, $col3:expr) => {
unsafe {
$crate::cast::Mat4Cast {
v4x4: [
$crate::const_vec4!($col0),
$crate::const_vec4!($col1),
$crate::const_vec4!($col2),
$crate::const_vec4!($col3),
],
}
.m4
}
};
($fx16:expr) => {
$crate::const_mat4!(
$crate::cast::F32x16Cast { fx16: $fx16 }.fx4x4[0],
$crate::cast::F32x16Cast { fx16: $fx16 }.fx4x4[1],
$crate::cast::F32x16Cast { fx16: $fx16 }.fx4x4[2],
$crate::cast::F32x16Cast { fx16: $fx16 }.fx4x4[3]
)
};
}
#[macro_export]
macro_rules! const_quat {
($fx4:expr) => {
unsafe { $crate::cast::Vec4Cast { fx4: $fx4 }.q }
};
}
#[macro_export]
macro_rules! const_dvec2 {
($fx2:expr) => {
unsafe { $crate::cast::DVec2Cast { fx2: $fx2 }.v2 }
};
}
#[macro_export]
macro_rules! const_dvec3 {
($fx3:expr) => {
unsafe { $crate::cast::DVec3Cast { fx3: $fx3 }.v3 }
};
}
#[macro_export]
macro_rules! const_dvec4 {
($fx4:expr) => {
unsafe { $crate::cast::DVec4Cast { fx4: $fx4 }.v4 }
};
}
#[macro_export]
macro_rules! const_dmat2 {
($col0:expr, $col1:expr) => {
unsafe {
$crate::cast::DMat2Cast {
v2x2: [$crate::const_dvec2!($col0), $crate::const_dvec2!($col1)],
}
.m2
}
};
($fx4:expr) => {
$crate::const_dmat2!(
$crate::cast::DVec4Cast { fx4: $fx4 }.fx2x2[0],
$crate::cast::DVec4Cast { fx4: $fx4 }.fx2x2[1]
)
};
}
#[macro_export]
macro_rules! const_dmat3 {
($col0:expr, $col1:expr, $col2:expr) => {
unsafe {
$crate::cast::DMat3Cast {
v3x3: [
$crate::const_dvec3!($col0),
$crate::const_dvec3!($col1),
$crate::const_dvec3!($col2),
],
}
.m3
}
};
($fx9:expr) => {
$crate::const_dmat3!(
$crate::cast::F64x9Cast { fx9: $fx9 }.fx3x3[0],
$crate::cast::F64x9Cast { fx9: $fx9 }.fx3x3[1],
$crate::cast::F64x9Cast { fx9: $fx9 }.fx3x3[2]
)
};
}
#[macro_export]
macro_rules! const_dmat4 {
($col0:expr, $col1:expr, $col2:expr, $col3:expr) => {
unsafe {
$crate::cast::DMat4Cast {
v4x4: [
$crate::const_dvec4!($col0),
$crate::const_dvec4!($col1),
$crate::const_dvec4!($col2),
$crate::const_dvec4!($col3),
],
}
.m4
}
};
($fx16:expr) => {
$crate::const_dmat4!(
$crate::cast::F64x16Cast { fx16: $fx16 }.fx4x4[0],
$crate::cast::F64x16Cast { fx16: $fx16 }.fx4x4[1],
$crate::cast::F64x16Cast { fx16: $fx16 }.fx4x4[2],
$crate::cast::F64x16Cast { fx16: $fx16 }.fx4x4[3]
)
};
}
#[macro_export]
macro_rules! const_dquat {
($fx4:expr) => {
unsafe { $crate::cast::DVec4Cast { fx4: $fx4 }.q }
};
}
#[macro_export]
macro_rules! const_ivec2 {
($ix2:expr) => {
unsafe { $crate::cast::IVec2Cast { ix2: $ix2 }.v2 }
};
}
#[macro_export]
macro_rules! const_ivec3 {
($ix3:expr) => {
unsafe { $crate::cast::IVec3Cast { ix3: $ix3 }.v3 }
};
}
#[macro_export]
macro_rules! const_ivec4 {
($ix4:expr) => {
unsafe { $crate::cast::IVec4Cast { ix4: $ix4 }.v4 }
};
}
#[macro_export]
macro_rules! const_uvec2 {
($ux2:expr) => {
unsafe { $crate::cast::UVec2Cast { ux2: $ux2 }.v2 }
};
}
#[macro_export]
macro_rules! const_uvec3 {
($ux3:expr) => {
unsafe { $crate::cast::UVec3Cast { ux3: $ux3 }.v3 }
};
}
#[macro_export]
macro_rules! const_uvec4 {
($ux4:expr) => {
unsafe { $crate::cast::UVec4Cast { ux4: $ux4 }.v4 }
};
}