(&self)
| 486 | } |
| 487 | |
| 488 | pub fn create_swapchain(&self) -> (vk::SwapchainKHR, vk::Extent2D) { |
| 489 | let surface_capabilities = self.surface_capabilities(); |
| 490 | let mut desired_image_count = surface_capabilities.min_image_count + 1; |
| 491 | if surface_capabilities.max_image_count > 0 |
| 492 | && desired_image_count > surface_capabilities.max_image_count |
| 493 | { |
| 494 | desired_image_count = surface_capabilities.max_image_count; |
| 495 | } |
| 496 | let pre_transform = if surface_capabilities |
| 497 | .supported_transforms |
| 498 | .contains(vk::SurfaceTransformFlagsKHR::IDENTITY) |
| 499 | { |
| 500 | vk::SurfaceTransformFlagsKHR::IDENTITY |
| 501 | } else { |
| 502 | surface_capabilities.current_transform |
| 503 | }; |
| 504 | let present_mode = unsafe { |
| 505 | self.surface_loader |
| 506 | .get_physical_device_surface_present_modes(self.pdevice, self.surface) |
| 507 | .unwrap() |
| 508 | .iter() |
| 509 | .cloned() |
| 510 | .find(|&mode| mode == vk::PresentModeKHR::MAILBOX) |
| 511 | .unwrap_or(vk::PresentModeKHR::FIFO) |
| 512 | }; |
| 513 | let extent = self.surface_resolution(); |
| 514 | let swapchain_create_info = vk::SwapchainCreateInfoKHR::builder() |
| 515 | .surface(self.surface) |
| 516 | .min_image_count(desired_image_count) |
| 517 | .image_color_space(self.surface_format.color_space) |
| 518 | .image_format(self.surface_format.format) |
| 519 | .image_extent(extent) |
| 520 | .image_usage(vk::ImageUsageFlags::COLOR_ATTACHMENT) |
| 521 | .image_sharing_mode(vk::SharingMode::EXCLUSIVE) |
| 522 | .pre_transform(pre_transform) |
| 523 | .composite_alpha(vk::CompositeAlphaFlagsKHR::OPAQUE) |
| 524 | .present_mode(present_mode) |
| 525 | .clipped(true) |
| 526 | .image_array_layers(1); |
| 527 | let swapchain = unsafe { |
| 528 | self.swapchain_loader |
| 529 | .create_swapchain(&swapchain_create_info, None) |
| 530 | .unwrap() |
| 531 | }; |
| 532 | (swapchain, extent) |
| 533 | } |
| 534 | |
| 535 | pub fn create_image_views(&self, swapchain: vk::SwapchainKHR) -> Vec<vk::ImageView> { |
| 536 | unsafe { |
no test coverage detected