Implement Byteable and RenderResource for [T; N] (#1872)
Implements `Byteable` and `RenderResource` for any array containing `Byteable` elements. This allows `RenderResources` to be implemented on structs with arbitrarily-sized arrays, among other things:
```rust
#[derive(RenderResources, TypeUuid)]
#[uuid = "2733ff34-8f95-459f-bf04-3274e686ac5f"]
struct Foo {
buffer: [i32; 256],
}
```
This commit is contained in:
parent
df3f40afd4
commit
deb9f23667
@ -83,10 +83,8 @@ where
|
|||||||
T: Byteable,
|
T: Byteable,
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
unsafe impl<T> Byteable for [T; 2] where T: Byteable {}
|
|
||||||
unsafe impl<T> Byteable for [T; 3] where T: Byteable {}
|
unsafe impl<T, const N: usize> Byteable for [T; N] where T: Byteable {}
|
||||||
unsafe impl<T> Byteable for [T; 4] where T: Byteable {}
|
|
||||||
unsafe impl<T> Byteable for [T; 16] where T: Byteable {}
|
|
||||||
|
|
||||||
unsafe impl Byteable for u8 {}
|
unsafe impl Byteable for u8 {}
|
||||||
unsafe impl Byteable for u16 {}
|
unsafe impl Byteable for u16 {}
|
||||||
@ -233,4 +231,10 @@ mod tests {
|
|||||||
fn test_mat4_round_trip() {
|
fn test_mat4_round_trip() {
|
||||||
test_round_trip(Mat4::IDENTITY);
|
test_round_trip(Mat4::IDENTITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_array_round_trip() {
|
||||||
|
test_round_trip([-10i32; 200]);
|
||||||
|
test_round_trip([Vec2::ZERO, Vec2::ONE, Vec2::Y, Vec2::X]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -187,6 +187,27 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T, const N: usize> RenderResource for [T; N]
|
||||||
|
where
|
||||||
|
T: Sized + Byteable,
|
||||||
|
{
|
||||||
|
fn resource_type(&self) -> Option<RenderResourceType> {
|
||||||
|
Some(RenderResourceType::Buffer)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write_buffer_bytes(&self, buffer: &mut [u8]) {
|
||||||
|
self.write_bytes(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn buffer_byte_len(&self) -> Option<usize> {
|
||||||
|
Some(self.byte_len())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn texture(&self) -> Option<&Handle<Texture>> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl RenderResource for GlobalTransform {
|
impl RenderResource for GlobalTransform {
|
||||||
fn resource_type(&self) -> Option<RenderResourceType> {
|
fn resource_type(&self) -> Option<RenderResourceType> {
|
||||||
Some(RenderResourceType::Buffer)
|
Some(RenderResourceType::Buffer)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user