summary refs log tree commit diff
diff options
context:
space:
mode:
authorIrene Knapp <ireneista@irenes.space>2026-07-04 13:44:35 -0700
committerIrene Knapp <ireneista@irenes.space>2026-07-04 13:44:35 -0700
commit8eb7bc2dcab860231c26bfe14d4c780449052da3 (patch)
treed6def46222d7481fd3a8eeda87defabd75d7f094
parentb3a7ce316f51314a4851eba34d42ed612a6da163 (diff)
create swapchain images and image views
Force-Push: yes
Change-Id: If540bc5a398ff2b26e706b0c4fe85de4bb932232
-rw-r--r--src/main.rs48
1 files changed, 47 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs
index e864d27..f4e93cb 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -128,6 +128,8 @@ struct Surreality {
   // other, and other things of that nature. It's a first-class thing but for
   // now, we use at most one of it. We also support running without one.
   swapchain: OnceCell<vk::SwapchainKHR>,
+  swapchain_images: OnceCell<Vec<vk::Image>>,
+  swapchain_image_views: OnceCell<Vec<vk::ImageView>>,
 }
 
 impl Surreality {
@@ -146,6 +148,8 @@ impl Surreality {
       graphics_queue: OnceCell::new(),
       presentation_queue: OnceCell::new(),
       swapchain: OnceCell::new(),
+      swapchain_images: OnceCell::new(),
+      swapchain_image_views: OnceCell::new(),
     }
   }
 
@@ -592,9 +596,43 @@ impl Surreality {
       let swapchain = unsafe {
         device.create_swapchain_khr(&swapchain_info, None)
       }?;
-      println!("swapchain {:?}", swapchain);
+
+      let images = unsafe {
+        device.get_swapchain_images_khr(swapchain)
+      }?;
+
+      let mut image_views = Vec::new();
+      for image in &images {
+        let components = vk::ComponentMapping::builder()
+                             .r(vk::ComponentSwizzle::IDENTITY)
+                             .g(vk::ComponentSwizzle::IDENTITY)
+                             .b(vk::ComponentSwizzle::IDENTITY)
+                             .a(vk::ComponentSwizzle::IDENTITY);
+
+        let subresource_range = vk::ImageSubresourceRange::builder()
+                                    .aspect_mask(vk::ImageAspectFlags::COLOR)
+                                    .base_mip_level(0)
+                                    .level_count(1)
+                                    .base_array_layer(0)
+                                    .layer_count(1);
+
+        let view_info = vk::ImageViewCreateInfo::builder()
+                            .image(*image)
+                            .view_type(vk::ImageViewType::_2D)
+                            .format(format.format)
+                            .components(components)
+                            .subresource_range(subresource_range);
+
+        let view = unsafe {
+          device.create_image_view(&view_info, None)
+        }?;
+
+        image_views.push(view);
+      }
 
       self.swapchain.set(swapchain).unwrap();
+      self.swapchain_images.set(images).unwrap();
+      self.swapchain_image_views.set(image_views).unwrap();
     }
 
     Ok(())
@@ -874,6 +912,14 @@ impl Surreality {
 impl Drop for Surreality {
   #[allow(unsafe_code)]
   fn drop(&mut self) {
+    if let Some(image_views) = self.swapchain_image_views.get()
+       && let Some(device) = self.device.get()
+    {
+      for view in image_views {
+        unsafe { device.destroy_image_view(*view, None) };
+      }
+    }
+
     if let Some(swapchain) = self.swapchain.get()
        && let Some(device) = self.device.get()
     {