Helloo, I'm trying to make a simple visualiser in wgpu and currently to render I have a function that takes in a function for how to handle the renderpass
pub struct Graphics {
window: Window,
instance: wgpu::Instance,
surface: wgpu::Surface,
device: wgpu::Device,
queue: wgpu::Queue,
config: wgpu::SurfaceConfiguration,
}
impl Graphics {
...
fn render<F: FnOnce(&mut Self, wgpu::RenderPass)>(&mut self, f: F) {
let output = self.surface.get_current_texture().unwrap();
let view = output.texture.create_view(
&wgpu::TextureViewDescriptor::default());
let mut encoder = self.device.create_command_encoder(
&wgpu::CommandEncoderDescriptor {
label: Some("Render Encoder")
});
{
let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: Some("Render Pass"),
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
view: &view,
resolve_target: None,
ops: wgpu::Operations {
load: wgpu::LoadOp::Clear(wgpu::Color {
r: 0.1,
g: 0.2,
b: 0.3,
a: 1.0,
}),
store: true,
},
})],
depth_stencil_attachment: None,
});
f(self, render_pass);
}
self.queue.submit(iter::once(encoder.finish()));
output.present();
}
}