1 use crate::prelude::*; 2 use crate::vk; 3 use crate::{Device, Instance}; 4 use std::ffi::CStr; 5 use std::mem; 6 7 #[derive(Clone)] 8 pub struct FullScreenExclusive { 9 handle: vk::Device, 10 full_screen_exclusive_fn: vk::ExtFullScreenExclusiveFn, 11 } 12 13 impl FullScreenExclusive { new(instance: &Instance, device: &Device) -> Self14 pub fn new(instance: &Instance, device: &Device) -> Self { 15 let full_screen_exclusive_fn = vk::ExtFullScreenExclusiveFn::load(|name| unsafe { 16 mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr())) 17 }); 18 Self { 19 handle: device.handle(), 20 full_screen_exclusive_fn, 21 } 22 } 23 name() -> &'static CStr24 pub fn name() -> &'static CStr { 25 vk::ExtFullScreenExclusiveFn::name() 26 } 27 28 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkAcquireFullScreenExclusiveModeEXT.html>"] acquire_full_screen_exclusive_mode( &self, swapchain: vk::SwapchainKHR, ) -> VkResult<()>29 pub unsafe fn acquire_full_screen_exclusive_mode( 30 &self, 31 swapchain: vk::SwapchainKHR, 32 ) -> VkResult<()> { 33 self.full_screen_exclusive_fn 34 .acquire_full_screen_exclusive_mode_ext(self.handle, swapchain) 35 .result() 36 } 37 38 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetPhysicalDeviceSurfacePresentModes2EXT.html>"] get_physical_device_surface_present_modes2( &self, physical_device: vk::PhysicalDevice, surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR, ) -> VkResult<Vec<vk::PresentModeKHR>>39 pub unsafe fn get_physical_device_surface_present_modes2( 40 &self, 41 physical_device: vk::PhysicalDevice, 42 surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR, 43 ) -> VkResult<Vec<vk::PresentModeKHR>> { 44 read_into_uninitialized_vector(|count, data| { 45 self.full_screen_exclusive_fn 46 .get_physical_device_surface_present_modes2_ext( 47 physical_device, 48 surface_info, 49 count, 50 data, 51 ) 52 }) 53 } 54 55 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkReleaseFullScreenExclusiveModeEXT.html>"] release_full_screen_exclusive_mode( &self, swapchain: vk::SwapchainKHR, ) -> VkResult<()>56 pub unsafe fn release_full_screen_exclusive_mode( 57 &self, 58 swapchain: vk::SwapchainKHR, 59 ) -> VkResult<()> { 60 self.full_screen_exclusive_fn 61 .release_full_screen_exclusive_mode_ext(self.handle, swapchain) 62 .result() 63 } 64 65 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeviceGroupSurfacePresentModes2EXT.html>"] get_device_group_surface_present_modes2( &self, surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR, ) -> VkResult<vk::DeviceGroupPresentModeFlagsKHR>66 pub unsafe fn get_device_group_surface_present_modes2( 67 &self, 68 surface_info: &vk::PhysicalDeviceSurfaceInfo2KHR, 69 ) -> VkResult<vk::DeviceGroupPresentModeFlagsKHR> { 70 let mut present_modes = mem::zeroed(); 71 self.full_screen_exclusive_fn 72 .get_device_group_surface_present_modes2_ext( 73 self.handle, 74 surface_info, 75 &mut present_modes, 76 ) 77 .result_with_success(present_modes) 78 } 79 fp(&self) -> &vk::ExtFullScreenExclusiveFn80 pub fn fp(&self) -> &vk::ExtFullScreenExclusiveFn { 81 &self.full_screen_exclusive_fn 82 } 83 device(&self) -> vk::Device84 pub fn device(&self) -> vk::Device { 85 self.handle 86 } 87 } 88