Split record_render_commands and bind_commands
This commit is contained in:
parent
078e9daba9
commit
f91c0792b2
6 changed files with 83 additions and 85 deletions
|
@ -44,7 +44,7 @@ impl Square {
|
|||
}
|
||||
}
|
||||
|
||||
impl AsRenderableMesh<Vertex3D, u32> for Square {
|
||||
impl AsRenderableMesh<Vertex3D, Subbuffer<[u32]>> for Square {
|
||||
fn vertex_buffer(&self) -> &Subbuffer<[Vertex3D]> {
|
||||
&self.vertex_buffer
|
||||
}
|
||||
|
|
|
@ -28,20 +28,15 @@ use vulkano::{
|
|||
|
||||
use crate::core::render::{
|
||||
primitives::{
|
||||
AsBindableDescriptorSet, AsRecordable, AsRenderableMesh, mvp::Mvp, transform::TransformRaw,
|
||||
vertex::Vertex3D,
|
||||
AsBindableDescriptorSet, AsRecordable, AsRenderableMesh, AsRenderableMeshInstance,
|
||||
mvp::Mvp, transform::TransformRaw, vertex::Vertex3D,
|
||||
},
|
||||
texture::Texture,
|
||||
};
|
||||
|
||||
pub struct SimplePipelineRenderData<'a, T>
|
||||
where
|
||||
T: AsRenderableMesh<Vertex3D, u32>,
|
||||
{
|
||||
pub mesh: &'a T,
|
||||
pub struct SimplePipelineRenderData<'a> {
|
||||
pub mvp_uniform: &'a Subbuffer<[Mvp]>,
|
||||
pub texture: &'a Texture,
|
||||
pub instances: &'a Subbuffer<[TransformRaw]>,
|
||||
}
|
||||
|
||||
pub struct SimplePipeline {
|
||||
|
@ -130,14 +125,16 @@ impl SimplePipeline {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, T: AsRenderableMesh<Vertex3D, u32>> AsRecordable<SimplePipelineRenderData<'a, T>>
|
||||
impl<'a> AsRecordable<SimplePipelineRenderData<'a>, Vertex3D, Subbuffer<[u32]>, TransformRaw>
|
||||
for SimplePipeline
|
||||
{
|
||||
fn record_render_commands(
|
||||
fn record_bind_commands(
|
||||
builder: &mut AutoCommandBufferBuilder<PrimaryAutoCommandBuffer>,
|
||||
descriptor_set_allocator: &Arc<StandardDescriptorSetAllocator>,
|
||||
pipeline: &Arc<GraphicsPipeline>,
|
||||
data: &SimplePipelineRenderData<'a, T>,
|
||||
mesh: &impl AsRenderableMesh<Vertex3D, Subbuffer<[u32]>>,
|
||||
instances: &impl AsRenderableMeshInstance<TransformRaw>,
|
||||
data: &SimplePipelineRenderData<'a>,
|
||||
) -> Result<(), Box<dyn Error>> {
|
||||
let layouts = pipeline.layout().set_layouts();
|
||||
|
||||
|
@ -158,32 +155,12 @@ impl<'a, T: AsRenderableMesh<Vertex3D, u32>> AsRecordable<SimplePipelineRenderDa
|
|||
|
||||
builder.bind_vertex_buffers(
|
||||
0,
|
||||
(data.mesh.vertex_buffer().clone(), data.instances.clone()),
|
||||
(
|
||||
mesh.vertex_buffer().clone(),
|
||||
instances.instance_buffer().clone(),
|
||||
),
|
||||
)?;
|
||||
|
||||
match data.mesh.index_buffer() {
|
||||
Some(index_buffer) => {
|
||||
builder.bind_index_buffer(index_buffer.clone())?;
|
||||
unsafe {
|
||||
builder.draw_indexed(
|
||||
data.mesh.index_count(),
|
||||
data.instances.len() as u32,
|
||||
data.mesh.first_index(),
|
||||
data.mesh.vertex_offset(),
|
||||
0,
|
||||
)?;
|
||||
}
|
||||
}
|
||||
None => unsafe {
|
||||
builder.draw(
|
||||
data.mesh.vertex_count(),
|
||||
data.instances.len() as u32,
|
||||
data.mesh.first_vertex(),
|
||||
0,
|
||||
)?;
|
||||
},
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -206,17 +206,18 @@ impl Scene for MainScene {
|
|||
let transform_uniform =
|
||||
Transform::create_buffer(&app_context.memory_allocator, &state.instances)?;
|
||||
|
||||
SimplePipeline::record_render_commands(
|
||||
SimplePipeline::record_bind_commands(
|
||||
&mut builder,
|
||||
&app_context.descriptor_set_allocator,
|
||||
state.simple_pipeline.pipeline(),
|
||||
&state.square,
|
||||
&transform_uniform,
|
||||
&SimplePipelineRenderData {
|
||||
mesh: &state.square,
|
||||
mvp_uniform: &camera_uniform,
|
||||
texture: &state.texture,
|
||||
instances: &transform_uniform,
|
||||
},
|
||||
)?;
|
||||
SimplePipeline::record_draw_commands(&mut builder, &state.square, &transform_uniform)?;
|
||||
|
||||
RenderPassManager::end_rendering(&mut builder)?;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue