1
1
//! Traits related to vectors.
2
2
3
+ use crate :: scalar:: { Scalar , VectorOrScalar } ;
3
4
use glam:: { Vec3Swizzles , Vec4Swizzles } ;
4
5
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
+
5
49
/// Abstract trait representing a SPIR-V vector type.
6
50
///
7
51
/// # Safety
8
52
/// Implementing this trait on non-simd-vector types breaks assumptions of other unsafe code, and
9
53
/// 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 > { }
11
55
12
56
unsafe impl Vector < f32 , 2 > for glam:: Vec2 { }
13
57
unsafe impl Vector < f32 , 3 > for glam:: Vec3 { }
@@ -27,7 +71,7 @@ unsafe impl Vector<i32, 3> for glam::IVec3 {}
27
71
unsafe impl Vector < i32 , 4 > for glam:: IVec4 { }
28
72
29
73
/// 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
31
75
pub trait VectorTruncateInto < T > {
32
76
/// Slices the vector into a lower dimensional type by ignoring the higher components
33
77
fn truncate_into ( self ) -> T ;
0 commit comments