From 50aabaa6ee792db1e056556f6e7e1a3aed36b071 Mon Sep 17 00:00:00 2001 From: Florian RICHER Date: Mon, 9 Jun 2025 16:26:14 +0200 Subject: [PATCH] Remove all generics in AsRecordable --- src/core/render/primitives/command.rs | 33 +++++++++++----------- src/core/render/primitives/transform.rs | 6 ++-- src/core/render/resources/meshes/obj.rs | 9 ++++-- src/core/render/resources/meshes/square.rs | 9 ++++-- src/game/assets/pipelines/simple.rs | 9 +++--- 5 files changed, 36 insertions(+), 30 deletions(-) diff --git a/src/core/render/primitives/command.rs b/src/core/render/primitives/command.rs index 6fdca2c..16967d7 100644 --- a/src/core/render/primitives/command.rs +++ b/src/core/render/primitives/command.rs @@ -1,7 +1,7 @@ use std::{error::Error, sync::Arc}; use vulkano::{ - buffer::{IndexBuffer, Subbuffer}, + buffer::{BufferContents, IndexBuffer, Subbuffer}, command_buffer::{AutoCommandBufferBuilder, PrimaryAutoCommandBuffer}, descriptor_set::allocator::StandardDescriptorSetAllocator, pipeline::GraphicsPipeline, @@ -9,23 +9,20 @@ use vulkano::{ use super::AsDescriptorSet; -pub trait AsRecordable -where - MI: Into + Clone, -{ +pub trait AsRecordable { fn record_bind_commands( builder: &mut AutoCommandBufferBuilder, descriptor_set_allocator: &Arc, pipeline: &Arc, - mesh: &impl AsRenderableMesh, - instances: &impl AsRenderableMeshInstance, + mesh: &impl AsRenderableMesh, + instances: &impl AsRenderableMeshInstance, descriptor_sets: Vec>, ) -> Result<(), Box>; fn record_draw_commands( builder: &mut AutoCommandBufferBuilder, - mesh: &impl AsRenderableMesh, - instances: &impl AsRenderableMeshInstance, + mesh: &impl AsRenderableMesh, + instances: &impl AsRenderableMeshInstance, ) -> Result<(), Box> { match mesh.index_buffer() { Some(index_buffer) => { @@ -54,11 +51,11 @@ where } } -pub trait AsRenderableMesh -where - I: Into + Clone, -{ - fn vertex_buffer(&self) -> &Subbuffer<[V]>; +pub trait AsRenderableMesh { + type VertexBufferContentsType: BufferContents + Clone; + type IndexBufferType: Into + Clone; + + fn vertex_buffer(&self) -> &Subbuffer<[Self::VertexBufferContentsType]>; fn vertex_count(&self) -> u32; @@ -70,7 +67,7 @@ where 0 } - fn index_buffer(&self) -> Option<&I> { + fn index_buffer(&self) -> Option<&Self::IndexBufferType> { None } @@ -83,8 +80,10 @@ where } } -pub trait AsRenderableMeshInstance { - fn instance_buffer(&self) -> &Subbuffer<[T]>; +pub trait AsRenderableMeshInstance { + type InstanceBufferContents: BufferContents + Clone; + + fn instance_buffer(&self) -> &Subbuffer<[Self::InstanceBufferContents]>; fn instance_count(&self) -> u32; diff --git a/src/core/render/primitives/transform.rs b/src/core/render/primitives/transform.rs index 27f24f4..2645ad9 100644 --- a/src/core/render/primitives/transform.rs +++ b/src/core/render/primitives/transform.rs @@ -164,8 +164,10 @@ impl AsBindableBuffer for TransformRaw { impl AsVertexBuffer for TransformRaw {} -impl AsRenderableMeshInstance for Subbuffer<[TransformRaw]> { - fn instance_buffer(&self) -> &Subbuffer<[TransformRaw]> { +impl AsRenderableMeshInstance for Subbuffer<[TransformRaw]> { + type InstanceBufferContents = TransformRaw; + + fn instance_buffer(&self) -> &Subbuffer<[Self::InstanceBufferContents]> { self } diff --git a/src/core/render/resources/meshes/obj.rs b/src/core/render/resources/meshes/obj.rs index d699d10..fe40db8 100644 --- a/src/core/render/resources/meshes/obj.rs +++ b/src/core/render/resources/meshes/obj.rs @@ -57,12 +57,15 @@ impl ObjMesh { } } -impl AsRenderableMesh> for ObjMesh { - fn vertex_buffer(&self) -> &Subbuffer<[Vertex3D]> { +impl AsRenderableMesh for ObjMesh { + type VertexBufferContentsType = Vertex3D; + type IndexBufferType = Subbuffer<[u32]>; + + fn vertex_buffer(&self) -> &Subbuffer<[Self::VertexBufferContentsType]> { &self.vertex_buffer } - fn index_buffer(&self) -> Option<&Subbuffer<[u32]>> { + fn index_buffer(&self) -> Option<&Self::IndexBufferType> { Some(&self.index_buffer) } diff --git a/src/core/render/resources/meshes/square.rs b/src/core/render/resources/meshes/square.rs index 087b1a9..07b046c 100644 --- a/src/core/render/resources/meshes/square.rs +++ b/src/core/render/resources/meshes/square.rs @@ -44,12 +44,15 @@ impl SquareMesh { } } -impl AsRenderableMesh> for SquareMesh { - fn vertex_buffer(&self) -> &Subbuffer<[Vertex3D]> { +impl AsRenderableMesh for SquareMesh { + type VertexBufferContentsType = Vertex3D; + type IndexBufferType = Subbuffer<[u32]>; + + fn vertex_buffer(&self) -> &Subbuffer<[Self::VertexBufferContentsType]> { &self.vertex_buffer } - fn index_buffer(&self) -> Option<&Subbuffer<[u32]>> { + fn index_buffer(&self) -> Option<&Self::IndexBufferType> { Some(&self.index_buffer) } diff --git a/src/game/assets/pipelines/simple.rs b/src/game/assets/pipelines/simple.rs index e003276..8336a3d 100644 --- a/src/game/assets/pipelines/simple.rs +++ b/src/game/assets/pipelines/simple.rs @@ -1,7 +1,6 @@ -use std::{collections::HashMap, error::Error, sync::Arc}; +use std::{error::Error, sync::Arc}; use vulkano::{ - buffer::Subbuffer, command_buffer::{AutoCommandBufferBuilder, PrimaryAutoCommandBuffer}, descriptor_set::{ allocator::StandardDescriptorSetAllocator, layout::DescriptorSetLayoutCreateInfo, @@ -120,13 +119,13 @@ impl SimplePipeline { } } -impl AsRecordable, TransformRaw> for SimplePipeline { +impl AsRecordable for SimplePipeline { fn record_bind_commands( builder: &mut AutoCommandBufferBuilder, descriptor_set_allocator: &Arc, pipeline: &Arc, - mesh: &impl AsRenderableMesh>, - instances: &impl AsRenderableMeshInstance, + mesh: &impl AsRenderableMesh, + instances: &impl AsRenderableMeshInstance, descriptor_sets: Vec>, ) -> Result<(), Box> { builder.bind_pipeline_graphics(pipeline.clone())?;