diff --git a/src/core/render/primitives/buffer.rs b/src/core/render/primitives/buffer.rs index e01226f..33284e7 100644 --- a/src/core/render/primitives/buffer.rs +++ b/src/core/render/primitives/buffer.rs @@ -6,55 +6,53 @@ use vulkano::{ memory::allocator::{AllocationCreateInfo, StandardMemoryAllocator}, }; -pub trait AsBindableBuffer { +pub trait AsBindableBuffer { type BufferData: BufferContents + Clone; fn buffer_create_info() -> BufferCreateInfo; fn allocation_create_info() -> AllocationCreateInfo; - fn to_buffer_data(data: &T) -> Self::BufferData; + fn to_buffer_data(&self) -> Self::BufferData; fn create_buffer( + &self, memory_allocator: &Arc, - data: &T, ) -> Result, Validated> { - let buffer_data = Self::to_buffer_data(data); Buffer::from_iter( memory_allocator.clone(), Self::buffer_create_info(), Self::allocation_create_info(), - [buffer_data], + [self.to_buffer_data()], ) } - fn update_buffer( - buffer: &Subbuffer<[Self::BufferData]>, - data: &T, - ) -> Result<(), Box> { - let buffer_data = Self::to_buffer_data(data); + fn update_buffer(&self, buffer: &Subbuffer<[Self::BufferData]>) -> Result<(), Box> { let mut write_guard = buffer.write()?; - write_guard[0] = buffer_data; + write_guard[0] = self.to_buffer_data(); Ok(()) } } -pub trait AsUniformBuffer: AsBindableBuffer { +pub trait AsUniformBuffer: AsBindableBuffer { fn create_uniform_buffer( + &self, memory_allocator: &Arc, - data: &T, ) -> Result, Validated> { - Self::create_buffer(memory_allocator, data) + self.create_buffer(memory_allocator) } } -pub trait AsVertexBuffer: AsBindableBuffer { +pub trait AsVertexBuffer: AsBindableBuffer +where + Self: Sized, +{ fn create_vertex_buffer( memory_allocator: &Arc, - vertices: &[T], + vertices: &[Self], ) -> Result, Validated> { let buffer_data: Vec = - vertices.iter().map(|v| Self::to_buffer_data(v)).collect(); + vertices.iter().map(|v| v.to_buffer_data()).collect(); Buffer::from_iter( memory_allocator.clone(), @@ -65,13 +63,16 @@ pub trait AsVertexBuffer: AsBindableBuffer { } } -pub trait AsIndexBuffer: AsBindableBuffer { +pub trait AsIndexBuffer: AsBindableBuffer +where + Self: Sized, +{ fn create_index_buffer( memory_allocator: &Arc, - indices: &[T], + indices: &[Self], ) -> Result, Validated> { let buffer_data: Vec = - indices.iter().map(|i| Self::to_buffer_data(i)).collect(); + indices.iter().map(|i| i.to_buffer_data()).collect(); Buffer::from_iter( memory_allocator.clone(), diff --git a/src/core/render/primitives/camera.rs b/src/core/render/primitives/camera.rs index 4fdf1ae..1841079 100644 --- a/src/core/render/primitives/camera.rs +++ b/src/core/render/primitives/camera.rs @@ -118,6 +118,6 @@ impl Camera3D { projection: self.projection.to_cols_array_2d(), }; - Mvp::create_uniform_buffer(memory_allocator, &mvp) + mvp.create_uniform_buffer(memory_allocator) } } diff --git a/src/core/render/primitives/mvp.rs b/src/core/render/primitives/mvp.rs index 09c8673..6cf1362 100644 --- a/src/core/render/primitives/mvp.rs +++ b/src/core/render/primitives/mvp.rs @@ -30,11 +30,11 @@ impl Mvp { self, memory_allocator: &Arc, ) -> Result, Validated> { - Self::create_uniform_buffer(memory_allocator, &self) + self.create_uniform_buffer(memory_allocator) } } -impl AsBindableBuffer for Mvp { +impl AsBindableBuffer for Mvp { type BufferData = Mvp; fn buffer_create_info() -> BufferCreateInfo { @@ -52,12 +52,12 @@ impl AsBindableBuffer for Mvp { } } - fn to_buffer_data(data: &Mvp) -> Self::BufferData { - *data + fn to_buffer_data(&self) -> Self::BufferData { + *self } } -impl AsUniformBuffer for Mvp {} +impl AsUniformBuffer for Mvp {} impl AsDescriptorSetLayoutBindings for Mvp { fn as_descriptor_set_layout_bindings() -> BTreeMap { diff --git a/src/core/render/primitives/transform.rs b/src/core/render/primitives/transform.rs index 2645ad9..8818fd3 100644 --- a/src/core/render/primitives/transform.rs +++ b/src/core/render/primitives/transform.rs @@ -139,7 +139,7 @@ impl TransformRaw { } } -impl AsBindableBuffer for TransformRaw { +impl AsBindableBuffer for TransformRaw { type BufferData = TransformRaw; fn buffer_create_info() -> BufferCreateInfo { @@ -157,12 +157,12 @@ impl AsBindableBuffer for TransformRaw { } } - fn to_buffer_data(data: &TransformRaw) -> Self::BufferData { - *data + fn to_buffer_data(&self) -> Self::BufferData { + *self } } -impl AsVertexBuffer for TransformRaw {} +impl AsVertexBuffer for TransformRaw {} impl AsRenderableMeshInstance for Subbuffer<[TransformRaw]> { type InstanceBufferContents = TransformRaw; diff --git a/src/core/render/primitives/vertex.rs b/src/core/render/primitives/vertex.rs index 2a27b36..14571c6 100644 --- a/src/core/render/primitives/vertex.rs +++ b/src/core/render/primitives/vertex.rs @@ -25,7 +25,7 @@ pub struct Vertex3D { pub uv: [f32; 2], } -impl AsBindableBuffer for Vertex2D { +impl AsBindableBuffer for Vertex2D { type BufferData = Vertex2D; fn buffer_create_info() -> BufferCreateInfo { @@ -43,14 +43,14 @@ impl AsBindableBuffer for Vertex2D { } } - fn to_buffer_data(data: &Vertex2D) -> Self::BufferData { - *data + fn to_buffer_data(&self) -> Self::BufferData { + *self } } -impl AsVertexBuffer for Vertex2D {} +impl AsVertexBuffer for Vertex2D {} -impl AsBindableBuffer for Vertex3D { +impl AsBindableBuffer for Vertex3D { type BufferData = Vertex3D; fn buffer_create_info() -> BufferCreateInfo { @@ -68,14 +68,14 @@ impl AsBindableBuffer for Vertex3D { } } - fn to_buffer_data(data: &Vertex3D) -> Self::BufferData { - *data + fn to_buffer_data(&self) -> Self::BufferData { + *self } } -impl AsVertexBuffer for Vertex3D {} +impl AsVertexBuffer for Vertex3D {} -impl AsBindableBuffer for u32 { +impl AsBindableBuffer for u32 { type BufferData = u32; fn buffer_create_info() -> BufferCreateInfo { @@ -93,9 +93,9 @@ impl AsBindableBuffer for u32 { } } - fn to_buffer_data(data: &u32) -> Self::BufferData { - *data + fn to_buffer_data(&self) -> Self::BufferData { + *self } } -impl AsIndexBuffer for u32 {} +impl AsIndexBuffer for u32 {}