Skip to content

Commit

Permalink
implement reflection for more glam types (bevyengine#5194)
Browse files Browse the repository at this point in the history
# Objective

- To implement `Reflect` for more glam types.  

## Solution

insert `impl_reflect_struct` invocations for more glam types. I am not sure about the boolean vectors, since none of them implement `Serde::Serialize/Deserialize`, and the SIMD versions don't have public fields. 
I do still think implementing reflection is useful for BVec's since then they can be incorporated into `Reflect`'ed components and set dynamically even if as a whole + it's more consistent.

## Changelog
Implemented `Reflect` for the following types
 - BVec2
 - BVec3
 - **BVec3A** (on simd supported platforms only)
 - BVec4
 - **BVec4A** (on simd supported platforms only)
 - Mat2
 - Mat3A
 - DMat2
 - Affine2
 - Affine3A
 - DAffine2
 - DAffine3
 - EulerRot
  • Loading branch information
makspll authored and inodentry committed Aug 8, 2022
1 parent 5a30786 commit 1e94c43
Showing 1 changed file with 87 additions and 0 deletions.
87 changes: 87 additions & 0 deletions crates/bevy_reflect/src/impls/glam.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,31 @@ impl_reflect_struct!(
}
);

impl_reflect_struct!(
#[reflect(Debug, PartialEq, Default)]
struct BVec2 {
x: bool,
y: bool,
}
);
impl_reflect_struct!(
#[reflect(Debug, PartialEq, Default)]
struct BVec3 {
x: bool,
y: bool,
z: bool,
}
);
impl_reflect_struct!(
#[reflect(Debug, PartialEq, Default)]
struct BVec4 {
x: bool,
y: bool,
z: bool,
w: bool,
}
);

impl_reflect_struct!(
#[reflect(Debug, PartialEq, Serialize, Deserialize, Default)]
struct DVec2 {
Expand All @@ -113,6 +138,13 @@ impl_reflect_struct!(
}
);

impl_reflect_struct!(
#[reflect(Debug, PartialEq, Serialize, Deserialize, Default)]
struct Mat2 {
x_axis: Vec2,
y_axis: Vec2,
}
);
impl_reflect_struct!(
#[reflect(Debug, PartialEq, Serialize, Deserialize, Default)]
struct Mat3 {
Expand All @@ -121,6 +153,14 @@ impl_reflect_struct!(
z_axis: Vec3,
}
);
impl_reflect_struct!(
#[reflect(Debug, PartialEq, Serialize, Deserialize, Default)]
struct Mat3A {
x_axis: Vec3A,
y_axis: Vec3A,
z_axis: Vec3A,
}
);
impl_reflect_struct!(
#[reflect(Debug, PartialEq, Serialize, Deserialize, Default)]
struct Mat4 {
Expand All @@ -131,6 +171,13 @@ impl_reflect_struct!(
}
);

impl_reflect_struct!(
#[reflect(Debug, PartialEq, Serialize, Deserialize, Default)]
struct DMat2 {
x_axis: DVec2,
y_axis: DVec2,
}
);
impl_reflect_struct!(
#[reflect(Debug, PartialEq, Serialize, Deserialize, Default)]
struct DMat3 {
Expand All @@ -149,6 +196,36 @@ impl_reflect_struct!(
}
);

impl_reflect_struct!(
#[reflect(Debug, PartialEq, Serialize, Deserialize, Default)]
struct Affine2 {
matrix2: Mat2,
translation: Vec2,
}
);
impl_reflect_struct!(
#[reflect(Debug, PartialEq, Serialize, Deserialize, Default)]
struct Affine3A {
matrix3: Mat3A,
translation: Vec3A,
}
);

impl_reflect_struct!(
#[reflect(Debug, PartialEq, Serialize, Deserialize, Default)]
struct DAffine2 {
matrix2: DMat2,
translation: DVec2,
}
);
impl_reflect_struct!(
#[reflect(Debug, PartialEq, Serialize, Deserialize, Default)]
struct DAffine3 {
matrix3: DMat3,
translation: DVec3,
}
);

// Quat fields are read-only (as of now), and reflection is currently missing
// mechanisms for read-only fields. I doubt those mechanisms would be added,
// so for now quaternions will remain as values. They are represented identically
Expand All @@ -158,3 +235,13 @@ impl_reflect_value!(DQuat(Debug, PartialEq, Serialize, Deserialize, Default));

impl_from_reflect_value!(Quat);
impl_from_reflect_value!(DQuat);

impl_reflect_value!(EulerRot(Debug, Default));

// glam type aliases these to the non simd versions when there is no support (this breaks wasm builds for example)
// ideally it shouldn't do that and there's an issue on glam for this
// https://github.com/bitshifter/glam-rs/issues/306
#[cfg(any(target_feature = "sse2", target_feature = "simd128"))]
impl_reflect_value!(BVec3A(Debug, PartialEq, Default));
#[cfg(any(target_feature = "sse2", target_feature = "simd128"))]
impl_reflect_value!(BVec4A(Debug, PartialEq, Default));

0 comments on commit 1e94c43

Please sign in to comment.