Remove useless generics in buffer

This commit is contained in:
Florian RICHER 2025-06-09 16:32:58 +02:00
parent 50aabaa6ee
commit cc64efd96f
Signed by: florian.richer
GPG key ID: C73D37CBED7BFC77
5 changed files with 43 additions and 42 deletions

View file

@ -6,55 +6,53 @@ use vulkano::{
memory::allocator::{AllocationCreateInfo, StandardMemoryAllocator}, memory::allocator::{AllocationCreateInfo, StandardMemoryAllocator},
}; };
pub trait AsBindableBuffer<T> { pub trait AsBindableBuffer {
type BufferData: BufferContents + Clone; type BufferData: BufferContents + Clone;
fn buffer_create_info() -> BufferCreateInfo; fn buffer_create_info() -> BufferCreateInfo;
fn allocation_create_info() -> AllocationCreateInfo; fn allocation_create_info() -> AllocationCreateInfo;
fn to_buffer_data(data: &T) -> Self::BufferData; fn to_buffer_data(&self) -> Self::BufferData;
fn create_buffer( fn create_buffer(
&self,
memory_allocator: &Arc<StandardMemoryAllocator>, memory_allocator: &Arc<StandardMemoryAllocator>,
data: &T,
) -> Result<Subbuffer<[Self::BufferData]>, Validated<AllocateBufferError>> { ) -> Result<Subbuffer<[Self::BufferData]>, Validated<AllocateBufferError>> {
let buffer_data = Self::to_buffer_data(data);
Buffer::from_iter( Buffer::from_iter(
memory_allocator.clone(), memory_allocator.clone(),
Self::buffer_create_info(), Self::buffer_create_info(),
Self::allocation_create_info(), Self::allocation_create_info(),
[buffer_data], [self.to_buffer_data()],
) )
} }
fn update_buffer( fn update_buffer(&self, buffer: &Subbuffer<[Self::BufferData]>) -> Result<(), Box<dyn Error>> {
buffer: &Subbuffer<[Self::BufferData]>,
data: &T,
) -> Result<(), Box<dyn Error>> {
let buffer_data = Self::to_buffer_data(data);
let mut write_guard = buffer.write()?; let mut write_guard = buffer.write()?;
write_guard[0] = buffer_data; write_guard[0] = self.to_buffer_data();
Ok(()) Ok(())
} }
} }
pub trait AsUniformBuffer<T>: AsBindableBuffer<T> { pub trait AsUniformBuffer: AsBindableBuffer {
fn create_uniform_buffer( fn create_uniform_buffer(
&self,
memory_allocator: &Arc<StandardMemoryAllocator>, memory_allocator: &Arc<StandardMemoryAllocator>,
data: &T,
) -> Result<Subbuffer<[Self::BufferData]>, Validated<AllocateBufferError>> { ) -> Result<Subbuffer<[Self::BufferData]>, Validated<AllocateBufferError>> {
Self::create_buffer(memory_allocator, data) self.create_buffer(memory_allocator)
} }
} }
pub trait AsVertexBuffer<T>: AsBindableBuffer<T> { pub trait AsVertexBuffer: AsBindableBuffer
where
Self: Sized,
{
fn create_vertex_buffer( fn create_vertex_buffer(
memory_allocator: &Arc<StandardMemoryAllocator>, memory_allocator: &Arc<StandardMemoryAllocator>,
vertices: &[T], vertices: &[Self],
) -> Result<Subbuffer<[Self::BufferData]>, Validated<AllocateBufferError>> { ) -> Result<Subbuffer<[Self::BufferData]>, Validated<AllocateBufferError>> {
let buffer_data: Vec<Self::BufferData> = let buffer_data: Vec<Self::BufferData> =
vertices.iter().map(|v| Self::to_buffer_data(v)).collect(); vertices.iter().map(|v| v.to_buffer_data()).collect();
Buffer::from_iter( Buffer::from_iter(
memory_allocator.clone(), memory_allocator.clone(),
@ -65,13 +63,16 @@ pub trait AsVertexBuffer<T>: AsBindableBuffer<T> {
} }
} }
pub trait AsIndexBuffer<T>: AsBindableBuffer<T> { pub trait AsIndexBuffer: AsBindableBuffer
where
Self: Sized,
{
fn create_index_buffer( fn create_index_buffer(
memory_allocator: &Arc<StandardMemoryAllocator>, memory_allocator: &Arc<StandardMemoryAllocator>,
indices: &[T], indices: &[Self],
) -> Result<Subbuffer<[Self::BufferData]>, Validated<AllocateBufferError>> { ) -> Result<Subbuffer<[Self::BufferData]>, Validated<AllocateBufferError>> {
let buffer_data: Vec<Self::BufferData> = let buffer_data: Vec<Self::BufferData> =
indices.iter().map(|i| Self::to_buffer_data(i)).collect(); indices.iter().map(|i| i.to_buffer_data()).collect();
Buffer::from_iter( Buffer::from_iter(
memory_allocator.clone(), memory_allocator.clone(),

View file

@ -118,6 +118,6 @@ impl Camera3D {
projection: self.projection.to_cols_array_2d(), projection: self.projection.to_cols_array_2d(),
}; };
Mvp::create_uniform_buffer(memory_allocator, &mvp) mvp.create_uniform_buffer(memory_allocator)
} }
} }

View file

@ -30,11 +30,11 @@ impl Mvp {
self, self,
memory_allocator: &Arc<StandardMemoryAllocator>, memory_allocator: &Arc<StandardMemoryAllocator>,
) -> Result<Subbuffer<[Mvp]>, Validated<AllocateBufferError>> { ) -> Result<Subbuffer<[Mvp]>, Validated<AllocateBufferError>> {
Self::create_uniform_buffer(memory_allocator, &self) self.create_uniform_buffer(memory_allocator)
} }
} }
impl AsBindableBuffer<Mvp> for Mvp { impl AsBindableBuffer for Mvp {
type BufferData = Mvp; type BufferData = Mvp;
fn buffer_create_info() -> BufferCreateInfo { fn buffer_create_info() -> BufferCreateInfo {
@ -52,12 +52,12 @@ impl AsBindableBuffer<Mvp> for Mvp {
} }
} }
fn to_buffer_data(data: &Mvp) -> Self::BufferData { fn to_buffer_data(&self) -> Self::BufferData {
*data *self
} }
} }
impl AsUniformBuffer<Mvp> for Mvp {} impl AsUniformBuffer for Mvp {}
impl AsDescriptorSetLayoutBindings for Mvp { impl AsDescriptorSetLayoutBindings for Mvp {
fn as_descriptor_set_layout_bindings() -> BTreeMap<u32, DescriptorSetLayoutBinding> { fn as_descriptor_set_layout_bindings() -> BTreeMap<u32, DescriptorSetLayoutBinding> {

View file

@ -139,7 +139,7 @@ impl TransformRaw {
} }
} }
impl AsBindableBuffer<TransformRaw> for TransformRaw { impl AsBindableBuffer for TransformRaw {
type BufferData = TransformRaw; type BufferData = TransformRaw;
fn buffer_create_info() -> BufferCreateInfo { fn buffer_create_info() -> BufferCreateInfo {
@ -157,12 +157,12 @@ impl AsBindableBuffer<TransformRaw> for TransformRaw {
} }
} }
fn to_buffer_data(data: &TransformRaw) -> Self::BufferData { fn to_buffer_data(&self) -> Self::BufferData {
*data *self
} }
} }
impl AsVertexBuffer<TransformRaw> for TransformRaw {} impl AsVertexBuffer for TransformRaw {}
impl AsRenderableMeshInstance for Subbuffer<[TransformRaw]> { impl AsRenderableMeshInstance for Subbuffer<[TransformRaw]> {
type InstanceBufferContents = TransformRaw; type InstanceBufferContents = TransformRaw;

View file

@ -25,7 +25,7 @@ pub struct Vertex3D {
pub uv: [f32; 2], pub uv: [f32; 2],
} }
impl AsBindableBuffer<Vertex2D> for Vertex2D { impl AsBindableBuffer for Vertex2D {
type BufferData = Vertex2D; type BufferData = Vertex2D;
fn buffer_create_info() -> BufferCreateInfo { fn buffer_create_info() -> BufferCreateInfo {
@ -43,14 +43,14 @@ impl AsBindableBuffer<Vertex2D> for Vertex2D {
} }
} }
fn to_buffer_data(data: &Vertex2D) -> Self::BufferData { fn to_buffer_data(&self) -> Self::BufferData {
*data *self
} }
} }
impl AsVertexBuffer<Vertex2D> for Vertex2D {} impl AsVertexBuffer for Vertex2D {}
impl AsBindableBuffer<Vertex3D> for Vertex3D { impl AsBindableBuffer for Vertex3D {
type BufferData = Vertex3D; type BufferData = Vertex3D;
fn buffer_create_info() -> BufferCreateInfo { fn buffer_create_info() -> BufferCreateInfo {
@ -68,14 +68,14 @@ impl AsBindableBuffer<Vertex3D> for Vertex3D {
} }
} }
fn to_buffer_data(data: &Vertex3D) -> Self::BufferData { fn to_buffer_data(&self) -> Self::BufferData {
*data *self
} }
} }
impl AsVertexBuffer<Vertex3D> for Vertex3D {} impl AsVertexBuffer for Vertex3D {}
impl AsBindableBuffer<u32> for u32 { impl AsBindableBuffer for u32 {
type BufferData = u32; type BufferData = u32;
fn buffer_create_info() -> BufferCreateInfo { fn buffer_create_info() -> BufferCreateInfo {
@ -93,9 +93,9 @@ impl AsBindableBuffer<u32> for u32 {
} }
} }
fn to_buffer_data(data: &u32) -> Self::BufferData { fn to_buffer_data(&self) -> Self::BufferData {
*data *self
} }
} }
impl AsIndexBuffer<u32> for u32 {} impl AsIndexBuffer for u32 {}