From 8eb7bc2dcab860231c26bfe14d4c780449052da3 Mon Sep 17 00:00:00 2001 From: Irene Knapp Date: Sat, 4 Jul 2026 13:44:35 -0700 Subject: create swapchain images and image views Force-Push: yes Change-Id: If540bc5a398ff2b26e706b0c4fe85de4bb932232 --- src/main.rs | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) (limited to 'src/main.rs') 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, + swapchain_images: OnceCell>, + swapchain_image_views: OnceCell>, } 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() { -- cgit 1.4.1