Files
UwU-Engine/UwURenderEngine/RenderEngine/VkObjects/Swapchain.hpp
T

47 lines
1.8 KiB
C++

#pragma once
#include <vector>
#include <vulkan/vulkan.h>
#include "GLFW/glfw3.h"
namespace VkObjects
{
class Device;
class PhysicalDevice;
class Surface;
class Swapchain final
{
struct SwapchainSupportDetails
{
std::vector<VkSurfaceFormatKHR> formats;
std::vector<VkPresentModeKHR> present_modes;
VkSurfaceCapabilitiesKHR capabilities;
};
const Device& device_;
VkSwapchainKHR swapchain_ = nullptr;
std::vector<VkImage> swapchain_images_;
std::vector<VkImageView> swapchain_image_views_;
VkFormat swapchain_image_format_;
VkExtent2D swapchain_extent_;
static SwapchainSupportDetails query_swapchain_details(const Surface& surface, const PhysicalDevice& physical_device);
static VkSurfaceFormatKHR choose_surface_format(const std::vector<VkSurfaceFormatKHR>& surface_formats);
static VkPresentModeKHR choose_present_mode(const std::vector<VkPresentModeKHR>& present_modes, VkPresentModeKHR desired_present_mode);
void create_swapchain(const Surface& surface, const PhysicalDevice& physical_device, GLFWwindow* window);
void create_image_views();
public:
Swapchain(const Surface& surface, const PhysicalDevice& physical_device, const Device& device, GLFWwindow* window);
~Swapchain();
inline VkSwapchainKHR get_native() const { return swapchain_; }
inline const std::vector<VkImage>& get_images() const { return swapchain_images_; }
inline const std::vector<VkImageView>& get_image_views() const { return swapchain_image_views_; }
inline VkExtent2D get_extent() const { return swapchain_extent_; }
inline VkFormat get_image_format() const { return swapchain_image_format_; }
};
}