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},
};
pub trait AsBindableBuffer<T> {
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<StandardMemoryAllocator>,
data: &T,
) -> Result<Subbuffer<[Self::BufferData]>, Validated<AllocateBufferError>> {
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<dyn Error>> {
let buffer_data = Self::to_buffer_data(data);
fn update_buffer(&self, buffer: &Subbuffer<[Self::BufferData]>) -> Result<(), Box<dyn Error>> {
let mut write_guard = buffer.write()?;
write_guard[0] = buffer_data;
write_guard[0] = self.to_buffer_data();
Ok(())
}
}
pub trait AsUniformBuffer<T>: AsBindableBuffer<T> {
pub trait AsUniformBuffer: AsBindableBuffer {
fn create_uniform_buffer(
&self,
memory_allocator: &Arc<StandardMemoryAllocator>,
data: &T,
) -> 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(
memory_allocator: &Arc<StandardMemoryAllocator>,
vertices: &[T],
vertices: &[Self],
) -> Result<Subbuffer<[Self::BufferData]>, Validated<AllocateBufferError>> {
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(
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(
memory_allocator: &Arc<StandardMemoryAllocator>,
indices: &[T],
indices: &[Self],
) -> Result<Subbuffer<[Self::BufferData]>, Validated<AllocateBufferError>> {
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(
memory_allocator.clone(),

View file

@ -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)
}
}

View file

@ -30,11 +30,11 @@ impl Mvp {
self,
memory_allocator: &Arc<StandardMemoryAllocator>,
) -> 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;
fn buffer_create_info() -> BufferCreateInfo {
@ -52,12 +52,12 @@ impl AsBindableBuffer<Mvp> for Mvp {
}
}
fn to_buffer_data(data: &Mvp) -> Self::BufferData {
*data
fn to_buffer_data(&self) -> Self::BufferData {
*self
}
}
impl AsUniformBuffer<Mvp> for Mvp {}
impl AsUniformBuffer for Mvp {}
impl AsDescriptorSetLayoutBindings for Mvp {
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;
fn buffer_create_info() -> BufferCreateInfo {
@ -157,12 +157,12 @@ impl AsBindableBuffer<TransformRaw> for TransformRaw {
}
}
fn to_buffer_data(data: &TransformRaw) -> Self::BufferData {
*data
fn to_buffer_data(&self) -> Self::BufferData {
*self
}
}
impl AsVertexBuffer<TransformRaw> for TransformRaw {}
impl AsVertexBuffer for TransformRaw {}
impl AsRenderableMeshInstance for Subbuffer<[TransformRaw]> {
type InstanceBufferContents = TransformRaw;

View file

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