Prepare for making another render pass

This commit is contained in:
Hanno Braun 2024-11-21 18:48:29 +01:00
parent 3f82cbbcc9
commit 357210937c
2 changed files with 50 additions and 39 deletions

View File

@ -1,4 +1,4 @@
use super::shaders::Shaders;
use super::{geometry::Geometry, shaders::Shaders};
pub struct Pipeline {
render_pipeline: wgpu::RenderPipeline,
@ -60,6 +60,49 @@ impl Pipeline {
}
}
pub fn draw(
&self,
encoder: &mut wgpu::CommandEncoder,
frame_view: &wgpu::TextureView,
depth_view: &wgpu::TextureView,
geometry: &Geometry,
) {
let mut render_pass =
encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: None,
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
view: frame_view,
resolve_target: None,
ops: wgpu::Operations {
load: wgpu::LoadOp::Clear(wgpu::Color::WHITE),
store: wgpu::StoreOp::Store,
},
})],
depth_stencil_attachment: Some(
wgpu::RenderPassDepthStencilAttachment {
view: depth_view,
depth_ops: Some(wgpu::Operations {
load: wgpu::LoadOp::Clear(1.0),
store: wgpu::StoreOp::Store,
}),
stencil_ops: None,
},
),
timestamp_writes: None,
occlusion_query_set: None,
});
if geometry.num_indices > 0 {
render_pass.set_index_buffer(
geometry.indices.slice(..),
wgpu::IndexFormat::Uint32,
);
render_pass.set_vertex_buffer(0, geometry.vertices.slice(..));
self.set(&mut render_pass);
render_pass.draw_indexed(0..geometry.num_indices, 0, 0..1);
}
}
pub fn set(&self, render_pass: &mut wgpu::RenderPass) {
render_pass.set_pipeline(&self.render_pipeline);
render_pass.set_bind_group(0, &self.bind_group, &[]);

View File

@ -137,44 +137,12 @@ impl Renderer {
.device
.create_command_encoder(&wgpu::CommandEncoderDescriptor::default());
{
let mut render_pass =
encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: None,
color_attachments: &[Some(
wgpu::RenderPassColorAttachment {
view: &frame_view,
resolve_target: None,
ops: wgpu::Operations {
load: wgpu::LoadOp::Clear(wgpu::Color::WHITE),
store: wgpu::StoreOp::Store,
},
},
)],
depth_stencil_attachment: Some(
wgpu::RenderPassDepthStencilAttachment {
view: &self.depth_view,
depth_ops: Some(wgpu::Operations {
load: wgpu::LoadOp::Clear(1.0),
store: wgpu::StoreOp::Store,
}),
stencil_ops: None,
},
),
timestamp_writes: None,
occlusion_query_set: None,
});
if triangles.num_indices > 0 {
render_pass.set_index_buffer(
triangles.indices.slice(..),
wgpu::IndexFormat::Uint32,
);
render_pass.set_vertex_buffer(0, triangles.vertices.slice(..));
self.pipeline.set(&mut render_pass);
render_pass.draw_indexed(0..triangles.num_indices, 0, 0..1);
}
}
self.pipeline.draw(
&mut encoder,
&frame_view,
&self.depth_view,
&triangles,
);
self.queue.submit(Some(encoder.finish()));
frame.present();