summary refs log tree commit diff
path: root/src/graphics/render.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphics/render.rs')
-rw-r--r--src/graphics/render.rs22
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) };