11//! Traits related to vectors.
22
3+ use crate :: scalar:: { Scalar , VectorOrScalar } ;
34use glam:: { Vec3Swizzles , Vec4Swizzles } ;
45
6+ unsafe impl VectorOrScalar for glam:: Vec2 {
7+ type Scalar = f32 ;
8+ }
9+ unsafe impl VectorOrScalar for glam:: Vec3 {
10+ type Scalar = f32 ;
11+ }
12+ unsafe impl VectorOrScalar for glam:: Vec3A {
13+ type Scalar = f32 ;
14+ }
15+ unsafe impl VectorOrScalar for glam:: Vec4 {
16+ type Scalar = f32 ;
17+ }
18+
19+ unsafe impl VectorOrScalar for glam:: DVec2 {
20+ type Scalar = f64 ;
21+ }
22+ unsafe impl VectorOrScalar for glam:: DVec3 {
23+ type Scalar = f64 ;
24+ }
25+ unsafe impl VectorOrScalar for glam:: DVec4 {
26+ type Scalar = f64 ;
27+ }
28+
29+ unsafe impl VectorOrScalar for glam:: UVec2 {
30+ type Scalar = u32 ;
31+ }
32+ unsafe impl VectorOrScalar for glam:: UVec3 {
33+ type Scalar = u32 ;
34+ }
35+ unsafe impl VectorOrScalar for glam:: UVec4 {
36+ type Scalar = u32 ;
37+ }
38+
39+ unsafe impl VectorOrScalar for glam:: IVec2 {
40+ type Scalar = i32 ;
41+ }
42+ unsafe impl VectorOrScalar for glam:: IVec3 {
43+ type Scalar = i32 ;
44+ }
45+ unsafe impl VectorOrScalar for glam:: IVec4 {
46+ type Scalar = i32 ;
47+ }
48+
549/// Abstract trait representing a SPIR-V vector type.
650///
751/// # Safety
852/// Implementing this trait on non-simd-vector types breaks assumptions of other unsafe code, and
953/// should not be done.
10- pub unsafe trait Vector < T : crate :: scalar :: Scalar , const N : usize > : Default { }
54+ pub unsafe trait Vector < T : Scalar , const N : usize > : VectorOrScalar < Scalar = T > { }
1155
1256unsafe impl Vector < f32 , 2 > for glam:: Vec2 { }
1357unsafe impl Vector < f32 , 3 > for glam:: Vec3 { }
@@ -27,7 +71,7 @@ unsafe impl Vector<i32, 3> for glam::IVec3 {}
2771unsafe impl Vector < i32 , 4 > for glam:: IVec4 { }
2872
2973/// Trait that implements slicing of a vector into a scalar or vector of lower dimensions, by
30- /// ignoring the highter dimensions
74+ /// ignoring the higter dimensions
3175pub trait VectorTruncateInto < T > {
3276 /// Slices the vector into a lower dimensional type by ignoring the higher components
3377 fn truncate_into ( self ) -> T ;
0 commit comments