Remove useless generics in buffer
This commit is contained in:
parent
50aabaa6ee
commit
cc64efd96f
5 changed files with 43 additions and 42 deletions
|
@ -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(),
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue