diff options
Diffstat (limited to 'src/graphics/render.rs')
| -rw-r--r-- | src/graphics/render.rs | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/src/graphics/render.rs b/src/graphics/render.rs index 00e55ee..30f4b62 100644 --- a/src/graphics/render.rs +++ b/src/graphics/render.rs @@ -98,6 +98,8 @@ impl Render { pub fn destroy(mut self, permanent: &Permanent) { self.destroy_replaceable(permanent); + Frame::destroy(&mut self.per_frame, permanent); + if let Some(model) = self.model { model.destroy(&permanent.device); } @@ -105,24 +107,10 @@ impl Render { #[allow(unsafe_code)] fn destroy_replaceable(&mut self, permanent: &Permanent) { - let device = &permanent.device; - - let mut command_buffers = Vec::new(); - for frame in &self.per_frame { - unsafe { device.destroy_framebuffer(frame.framebuffer, None) }; + // We skip calling Frame::destroy_replaceable() here because then it would + // be called twice during Render::reinit(), and that seems excessive. - command_buffers.push(frame.command_buffer); - } - - // Notice that we free the buffers in the pool, but do not destroy the - // pool itself. Notice also that we only do this for the primary command - // pool, because that's the only one where we've kept track of the - // buffers. We promise ourselves to free buffers in the transient pool - // immediately after using them. - unsafe { - device.free_command_buffers(permanent.primary_command_pool, - &command_buffers) - }; + let device = &permanent.device; unsafe { device.destroy_pipeline(self.pipeline, None) }; unsafe { device.destroy_pipeline_layout(self.pipeline_layout, None) }; |