Cannot move out of encoder because it is borrowed

let output = self.surf.get_current_texture().unwrap();
        let view = output.texture.create_view(&wgpu::TextureViewDescriptor::default());
        let mut encoder = self.dev.create_command_encoder(&wgpu::CommandEncoderDescriptor {
            label: None,
        });
        let 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 {
                        r: 0.1,
                        g: 0.2,
                        b: 0.3,
                        a: 1.0,
                    }),
                    store: wgpu::StoreOp::Store,
                },
            })],
            depth_stencil_attachment: None,
            occlusion_query_set: None,
            timestamp_writes: None,
        });
        self.q.submit(std::iter::once(encoder.finish()));

error is at bottom

You need to drop the RenderPass before you finish the CommandEncoder.

You can write drop(render_pass);, or put a block around it:

let mut encoder = self.dev.create_command_encoder(...);
{
    let render_pass = encoder.begin_render_pass(...);
    // actually do things with the render_pass here
}
self.q.submit(std::iter::once(encoder.finish()));
1 Like

I'm dumb, that was in learn-wgpu

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.