Move render pass creation into modules

That’s where the pipeline is created and, they need to match
This commit is contained in:
numzero 2024-12-30 20:01:56 +03:00
parent fe94dd68a2
commit d17a3e3613
3 changed files with 57 additions and 39 deletions

View File

@ -126,20 +126,7 @@ fn main() {
let hdr = hdr.create_view(&wgpu::TextureViewDescriptor::default()); let hdr = hdr.create_view(&wgpu::TextureViewDescriptor::default());
let mut encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None }); let mut encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None });
{ {
let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { let mut render_pass = tracer.prepare(&mut encoder, &hdr);
label: None,
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
view: &hdr,
resolve_target: None,
ops: wgpu::Operations {
load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT),
store: wgpu::StoreOp::Store,
},
})],
depth_stencil_attachment: None,
occlusion_query_set: None,
timestamp_writes: None,
});
for _ in 0..RAYS_PER_PIXEL { for _ in 0..RAYS_PER_PIXEL {
frame += 1; frame += 1;
let time = frame as f32 / (60. * RAYS_PER_PIXEL as f32); let time = frame as f32 / (60. * RAYS_PER_PIXEL as f32);
@ -172,30 +159,15 @@ fn main() {
); );
} }
} }
{
let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: None,
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
view: &view,
resolve_target: None,
ops: wgpu::Operations {
load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT),
store: wgpu::StoreOp::Store,
},
})],
depth_stencil_attachment: None,
occlusion_query_set: None,
timestamp_writes: None,
});
presenter.render( presenter.render(
&device, &device,
&mut render_pass, &mut encoder,
&hdr, &hdr,
&view,
present::Params { present::Params {
divisor: RAYS_PER_PIXEL as f32, divisor: RAYS_PER_PIXEL as f32,
}, },
); );
}
queue.submit(std::iter::once(encoder.finish())); queue.submit(std::iter::once(encoder.finish()));
output.present(); output.present();
} }

View File

@ -86,7 +86,7 @@ impl Presenter {
} }
} }
pub fn render( fn render_internal(
&self, &self,
device: &wgpu::Device, device: &wgpu::Device,
pass: &mut wgpu::RenderPass, pass: &mut wgpu::RenderPass,
@ -121,4 +121,29 @@ impl Presenter {
pass.set_bind_group(0, &bindings, &[]); pass.set_bind_group(0, &bindings, &[]);
pass.draw(0..4, 0..1); pass.draw(0..4, 0..1);
} }
pub fn render(
&self,
device: &wgpu::Device,
encoder: &mut wgpu::CommandEncoder,
source: &wgpu::TextureView,
target: &wgpu::TextureView,
params: Params,
) {
let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: None,
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
view: target,
resolve_target: None,
ops: wgpu::Operations {
load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT),
store: wgpu::StoreOp::Store,
},
})],
depth_stencil_attachment: None,
occlusion_query_set: None,
timestamp_writes: None,
});
self.render_internal(device, &mut render_pass, source, params);
}
} }

View File

@ -233,6 +233,27 @@ impl Tracer {
Self { view_buf, pipeline } Self { view_buf, pipeline }
} }
pub fn prepare<'encoder>(
&self,
encoder: &'encoder mut wgpu::CommandEncoder,
target: &wgpu::TextureView,
) -> wgpu::RenderPass<'encoder> {
encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: None,
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
view: &target,
resolve_target: None,
ops: wgpu::Operations {
load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT),
store: wgpu::StoreOp::Store,
},
})],
depth_stencil_attachment: None,
occlusion_query_set: None,
timestamp_writes: None,
})
}
pub fn render( pub fn render(
&self, &self,
pass: &mut wgpu::RenderPass, pass: &mut wgpu::RenderPass,