PeriDyno 1.0.0
Loading...
Searching...
No Matches
VulkanSwapChain.h
Go to the documentation of this file.
1/*
2* Class wrapping access to the swap chain
3*
4* A swap chain is a collection of framebuffers used for rendering and presentation to the windowing system
5*
6* Copyright (C) 2016-2017 by Sascha Willems - www.saschawillems.de
7*
8* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
9*/
10
11#pragma once
12
13#include <stdlib.h>
14#include <string>
15#include <assert.h>
16#include <stdio.h>
17#include <vector>
18
19#include <vulkan/vulkan.h>
20#include "VulkanTools.h"
21
22#ifdef __ANDROID__
23#include "VulkanAndroid.h"
24#endif
25
26typedef struct _SwapChainBuffers {
27 VkImage image;
28 VkImageView view;
30
32{
33private:
34 VkInstance instance;
35 VkDevice device;
36 VkPhysicalDevice physicalDevice;
37 VkSurfaceKHR surface;
38 // Function pointers
39 PFN_vkGetPhysicalDeviceSurfaceSupportKHR fpGetPhysicalDeviceSurfaceSupportKHR;
40 PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR fpGetPhysicalDeviceSurfaceCapabilitiesKHR;
41 PFN_vkGetPhysicalDeviceSurfaceFormatsKHR fpGetPhysicalDeviceSurfaceFormatsKHR;
42 PFN_vkGetPhysicalDeviceSurfacePresentModesKHR fpGetPhysicalDeviceSurfacePresentModesKHR;
43 PFN_vkCreateSwapchainKHR fpCreateSwapchainKHR;
44 PFN_vkDestroySwapchainKHR fpDestroySwapchainKHR;
45 PFN_vkGetSwapchainImagesKHR fpGetSwapchainImagesKHR;
46 PFN_vkAcquireNextImageKHR fpAcquireNextImageKHR;
47 PFN_vkQueuePresentKHR fpQueuePresentKHR;
48public:
49 VkFormat colorFormat;
50 VkColorSpaceKHR colorSpace;
51 VkSwapchainKHR swapChain = VK_NULL_HANDLE;
52 uint32_t imageCount;
53 std::vector<VkImage> images;
54 std::vector<SwapChainBuffer> buffers;
55 uint32_t queueNodeIndex = UINT32_MAX;
56
57#if defined(VK_USE_PLATFORM_WIN32_KHR)
58 void initSurface(void* platformHandle, void* platformWindow);
59#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
60 void initSurface(ANativeWindow* window);
61#elif defined(VK_USE_PLATFORM_XCB_KHR)
62 void initSurface(xcb_window_t xcbWindow);
63#endif
64 void connect(VkInstance instance, VkPhysicalDevice physicalDevice, VkDevice device);
65 void create(uint32_t* width, uint32_t* height, bool vsync = false);
66 VkResult acquireNextImage(VkSemaphore presentCompleteSemaphore, uint32_t* imageIndex);
67 VkResult queuePresent(VkQueue queue, uint32_t imageIndex, VkSemaphore waitSemaphore = VK_NULL_HANDLE);
68 void cleanup();
69};
struct _SwapChainBuffers SwapChainBuffer
PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR fpGetPhysicalDeviceSurfaceCapabilitiesKHR
PFN_vkGetSwapchainImagesKHR fpGetSwapchainImagesKHR
std::vector< SwapChainBuffer > buffers
PFN_vkAcquireNextImageKHR fpAcquireNextImageKHR
std::vector< VkImage > images
PFN_vkQueuePresentKHR fpQueuePresentKHR
void create(uint32_t *width, uint32_t *height, bool vsync=false)
VkPhysicalDevice physicalDevice
VkResult queuePresent(VkQueue queue, uint32_t imageIndex, VkSemaphore waitSemaphore=VK_NULL_HANDLE)
VkSurfaceKHR surface
void connect(VkInstance instance, VkPhysicalDevice physicalDevice, VkDevice device)
PFN_vkGetPhysicalDeviceSurfaceSupportKHR fpGetPhysicalDeviceSurfaceSupportKHR
VkSwapchainKHR swapChain
PFN_vkCreateSwapchainKHR fpCreateSwapchainKHR
uint32_t queueNodeIndex
VkInstance instance
VkResult acquireNextImage(VkSemaphore presentCompleteSemaphore, uint32_t *imageIndex)
PFN_vkDestroySwapchainKHR fpDestroySwapchainKHR
VkColorSpaceKHR colorSpace
PFN_vkGetPhysicalDeviceSurfacePresentModesKHR fpGetPhysicalDeviceSurfacePresentModesKHR
PFN_vkGetPhysicalDeviceSurfaceFormatsKHR fpGetPhysicalDeviceSurfaceFormatsKHR