peridot_math/linarg/
bedrock_interop.rs

1//! Bedrock interop
2
3use super::*;
4use bedrock as br;
5
6impl<T: Into<u32> + Copy> br::ImageSize for Vector2<T> {
7    const DIMENSION: br::vk::VkImageType = br::vk::VK_IMAGE_TYPE_2D;
8
9    #[inline(always)]
10    fn conv(self) -> br::vk::VkExtent3D {
11        br::vk::VkExtent2D::from(self).with_depth(1)
12    }
13}
14impl<T: Into<u32> + Copy> br::ImageSize for Vector3<T> {
15    const DIMENSION: br::vk::VkImageType = br::vk::VK_IMAGE_TYPE_3D;
16
17    #[inline(always)]
18    fn conv(self) -> br::vk::VkExtent3D {
19        br::vk::VkExtent3D::from(self)
20    }
21}
22
23impl<T: Into<u32>> From<Vector2<T>> for br::vk::VkExtent2D {
24    #[inline(always)]
25    fn from(v: Vector2<T>) -> Self {
26        Self {
27            width: v.0.into(),
28            height: v.1.into(),
29        }
30    }
31}
32impl<T: Into<u32> + Copy> From<&'_ Vector2<T>> for br::vk::VkExtent2D {
33    #[inline(always)]
34    fn from(v: &Vector2<T>) -> Self {
35        Self {
36            width: v.0.into(),
37            height: v.1.into(),
38        }
39    }
40}
41impl<T> From<br::vk::VkExtent2D> for Vector2<T>
42where
43    u32: Into<T>,
44{
45    #[inline(always)]
46    fn from(value: br::vk::VkExtent2D) -> Self {
47        Self(value.width.into(), value.height.into())
48    }
49}
50impl<T: Into<u32>> From<Vector3<T>> for br::vk::VkExtent3D {
51    #[inline(always)]
52    fn from(v: Vector3<T>) -> Self {
53        Self {
54            width: v.0.into(),
55            height: v.1.into(),
56            depth: v.2.into(),
57        }
58    }
59}
60impl<T: Into<u32> + Copy> From<&'_ Vector3<T>> for br::vk::VkExtent3D {
61    #[inline(always)]
62    fn from(v: &Vector3<T>) -> Self {
63        Self {
64            width: v.0.into(),
65            height: v.1.into(),
66            depth: v.2.into(),
67        }
68    }
69}
70impl<T> From<br::vk::VkExtent3D> for Vector3<T>
71where
72    u32: Into<T>,
73{
74    #[inline(always)]
75    fn from(value: br::vk::VkExtent3D) -> Self {
76        Self(value.width.into(), value.height.into(), value.depth.into())
77    }
78}
79
80impl<T: Into<i32>> From<Vector2<T>> for br::vk::VkOffset2D {
81    #[inline(always)]
82    fn from(v: Vector2<T>) -> Self {
83        Self {
84            x: v.0.into(),
85            y: v.1.into(),
86        }
87    }
88}
89impl<T: Into<i32> + Copy> From<&'_ Vector2<T>> for br::vk::VkOffset2D {
90    #[inline(always)]
91    fn from(v: &Vector2<T>) -> Self {
92        Self {
93            x: v.0.into(),
94            y: v.1.into(),
95        }
96    }
97}
98impl<T> From<br::vk::VkOffset2D> for Vector2<T>
99where
100    i32: Into<T>,
101{
102    #[inline(always)]
103    fn from(value: br::vk::VkOffset2D) -> Self {
104        Self(value.x.into(), value.y.into())
105    }
106}
107impl<T: Into<i32>> From<Vector3<T>> for br::vk::VkOffset3D {
108    #[inline(always)]
109    fn from(v: Vector3<T>) -> Self {
110        Self {
111            x: v.0.into(),
112            y: v.1.into(),
113            z: v.2.into(),
114        }
115    }
116}
117impl<T: Into<i32> + Copy> From<&'_ Vector3<T>> for br::vk::VkOffset3D {
118    #[inline(always)]
119    fn from(v: &Vector3<T>) -> Self {
120        Self {
121            x: v.0.into(),
122            y: v.1.into(),
123            z: v.2.into(),
124        }
125    }
126}
127impl<T> From<br::vk::VkOffset3D> for Vector3<T>
128where
129    i32: Into<T>,
130{
131    #[inline(always)]
132    fn from(value: br::vk::VkOffset3D) -> Self {
133        Self(value.x.into(), value.y.into(), value.z.into())
134    }
135}