• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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