18 #include "../utils/utils.hpp"
22 static char const * AppName =
"05_InitSwapchain";
23 static char const * EngineName =
"Vulkan.hpp";
30 #if !defined( NDEBUG )
47 glfwCreateWindowSurface(
static_cast<VkInstance>( instance ), window.
handle,
nullptr, &_surface );
53 size_t presentQueueFamilyIndex = physicalDevice.
getSurfaceSupportKHR(
static_cast<uint32_t
>( graphicsQueueFamilyIndex ), surface )
54 ? graphicsQueueFamilyIndex
55 : queueFamilyProperties.size();
56 if ( presentQueueFamilyIndex == queueFamilyProperties.size() )
60 for (
size_t i = 0; i < queueFamilyProperties.size(); i++ )
65 graphicsQueueFamilyIndex = vk::su::checked_cast<uint32_t>( i );
66 presentQueueFamilyIndex = i;
70 if ( presentQueueFamilyIndex == queueFamilyProperties.size() )
74 for (
size_t i = 0; i < queueFamilyProperties.size(); i++ )
78 presentQueueFamilyIndex = i;
84 if ( ( graphicsQueueFamilyIndex == queueFamilyProperties.size() ) || ( presentQueueFamilyIndex == queueFamilyProperties.size() ) )
86 throw std::runtime_error(
"Could not find a queue for graphics or present -> terminating" );
94 assert( !formats.empty() );
136 swapchainPresentMode,
140 uint32_t queueFamilyIndices[2] = {
static_cast<uint32_t
>( graphicsQueueFamilyIndex ),
static_cast<uint32_t
>( presentQueueFamilyIndex ) };
141 if ( graphicsQueueFamilyIndex != presentQueueFamilyIndex )
155 std::vector<vk::ImageView> imageViews;
156 imageViews.reserve( swapChainImages.size() );
158 for (
auto image : swapChainImages )
160 imageViewCreateInfo.
image = image;
165 for (
auto & imageView : imageViews )
175 #if !defined( NDEBUG )
185 catch ( std::exception & err )
void cout(vk::SurfaceCapabilitiesKHR const &surfaceCapabilities)
void destroy(const vk::AllocationCallbacks *pAllocator, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void destroyImageView(vk::ImageView imageView, const vk::AllocationCallbacks *pAllocator, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createImageView(const vk::ImageViewCreateInfo *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::ImageView *pView, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createSwapchainKHR(const vk::SwapchainCreateInfoKHR *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::SwapchainKHR *pSwapchain, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result getSwapchainImagesKHR(vk::SwapchainKHR swapchain, uint32_t *pSwapchainImageCount, vk::Image *pSwapchainImages, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void destroySwapchainKHR(vk::SwapchainKHR swapchain, const vk::AllocationCallbacks *pAllocator, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createDebugUtilsMessengerEXT(const vk::DebugUtilsMessengerCreateInfoEXT *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::DebugUtilsMessengerEXT *pMessenger, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void destroy(const vk::AllocationCallbacks *pAllocator, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result enumeratePhysicalDevices(uint32_t *pPhysicalDeviceCount, vk::PhysicalDevice *pPhysicalDevices, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void destroySurfaceKHR(vk::SurfaceKHR surface, const vk::AllocationCallbacks *pAllocator, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void destroyDebugUtilsMessengerEXT(vk::DebugUtilsMessengerEXT messenger, const vk::AllocationCallbacks *pAllocator, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result getSurfaceFormatsKHR(vk::SurfaceKHR surface, uint32_t *pSurfaceFormatCount, vk::SurfaceFormatKHR *pSurfaceFormats, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void getQueueFamilyProperties(uint32_t *pQueueFamilyPropertyCount, vk::QueueFamilyProperties *pQueueFamilyProperties, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result getSurfaceCapabilitiesKHR(vk::SurfaceKHR surface, vk::SurfaceCapabilitiesKHR *pSurfaceCapabilities, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result getSurfaceSupportKHR(uint32_t queueFamilyIndex, vk::SurfaceKHR surface, vk::Bool32 *pSupported, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
virtual const char * what() const VULKAN_HPP_NOEXCEPT
uint32_t findGraphicsQueueFamilyIndex(std::vector< vk::QueueFamilyProperties > const &queueFamilyProperties)
vk::DebugUtilsMessengerCreateInfoEXT makeDebugUtilsMessengerCreateInfoEXT()
vk::Instance createInstance(std::string const &appName, std::string const &engineName, std::vector< std::string > const &layers, std::vector< std::string > const &extensions, uint32_t apiVersion)
vk::Device createDevice(vk::PhysicalDevice const &physicalDevice, uint32_t queueFamilyIndex, std::vector< std::string > const &extensions, vk::PhysicalDeviceFeatures const *physicalDeviceFeatures, void const *pNext)
WindowData createWindow(std::string const &windowName, vk::Extent2D const &extent)
std::vector< std::string > getInstanceExtensions()
constexpr VULKAN_HPP_INLINE const T & clamp(const T &v, const T &lo, const T &hi)
std::vector< std::string > getDeviceExtensions()
SurfaceTransformFlagBitsKHR
CompositeAlphaFlagBitsKHR
vk::Extent2D maxImageExtent
vk::Extent2D minImageExtent
vk::SurfaceTransformFlagsKHR supportedTransforms
vk::SurfaceTransformFlagBitsKHR currentTransform
vk::CompositeAlphaFlagsKHR supportedCompositeAlpha
vk::Extent2D currentExtent
vk::SharingMode imageSharingMode
const uint32_t * pQueueFamilyIndices
uint32_t queueFamilyIndexCount
struct VkInstance_T * VkInstance