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 mut encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None });
{
let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
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,
});
let mut render_pass = tracer.prepare(&mut encoder, &hdr);
for _ in 0..RAYS_PER_PIXEL {
frame += 1;
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(
&device,
&mut render_pass,
&hdr,
present::Params {
divisor: RAYS_PER_PIXEL as f32,
},
);
}
presenter.render(
&device,
&mut encoder,
&hdr,
&view,
present::Params {
divisor: RAYS_PER_PIXEL as f32,
},
);
queue.submit(std::iter::once(encoder.finish()));
output.present();
}

View File

@ -86,7 +86,7 @@ impl Presenter {
}
}
pub fn render(
fn render_internal(
&self,
device: &wgpu::Device,
pass: &mut wgpu::RenderPass,
@ -121,4 +121,29 @@ impl Presenter {
pass.set_bind_group(0, &bindings, &[]);
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 }
}
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(
&self,
pass: &mut wgpu::RenderPass,