76 lines
2.0 KiB
C++
76 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include <vulkan/vulkan.h>
|
|
|
|
#include <cstdint>
|
|
#include <iostream>
|
|
#include <optional>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
struct SDL_Window;
|
|
|
|
struct QueueFamilyIndices
|
|
{
|
|
std::optional<uint32_t> graphicsFamily;
|
|
std::optional<uint32_t> presentFamily;
|
|
|
|
bool isComplete() const
|
|
{
|
|
return graphicsFamily.has_value() &&
|
|
presentFamily.has_value();
|
|
}
|
|
};
|
|
|
|
struct SwapchainSupportDetails
|
|
{
|
|
VkSurfaceCapabilitiesKHR capabilities;
|
|
std::vector<VkSurfaceFormatKHR> formats;
|
|
std::vector<VkPresentModeKHR> presentModes;
|
|
};
|
|
|
|
QueueFamilyIndices findQueueFamilies(
|
|
VkPhysicalDevice device,
|
|
VkSurfaceKHR surface);
|
|
|
|
SwapchainSupportDetails querySwapchainSupport(
|
|
VkPhysicalDevice device,
|
|
VkSurfaceKHR surface);
|
|
|
|
class VulkanContext
|
|
{
|
|
public:
|
|
VulkanContext(
|
|
SDL_Window* window,
|
|
const char* appName,
|
|
uint32_t versionMajor,
|
|
uint32_t versionMinor,
|
|
uint32_t versionPatch);
|
|
|
|
~VulkanContext();
|
|
|
|
VulkanContext(const VulkanContext&) = delete;
|
|
VulkanContext& operator=(const VulkanContext&) = delete;
|
|
|
|
VkDevice device() const { return m_device; }
|
|
VkPhysicalDevice physicalDevice() const { return m_physicalDevice; }
|
|
VkInstance instance() const { return m_instance; }
|
|
VkSurfaceKHR surface() const { return m_surface; }
|
|
VkQueue graphicsQueue() const { return m_graphicsQueue; }
|
|
VkQueue presentQueue() const { return m_presentQueue; }
|
|
VkCommandPool commandPool() const { return m_commandPool; }
|
|
const QueueFamilyIndices& queueIndices() const { return m_queueIndices; }
|
|
|
|
void release();
|
|
|
|
private:
|
|
VkInstance m_instance = VK_NULL_HANDLE;
|
|
VkSurfaceKHR m_surface = VK_NULL_HANDLE;
|
|
VkPhysicalDevice m_physicalDevice = VK_NULL_HANDLE;
|
|
VkDevice m_device = VK_NULL_HANDLE;
|
|
VkQueue m_graphicsQueue = VK_NULL_HANDLE;
|
|
VkQueue m_presentQueue = VK_NULL_HANDLE;
|
|
VkCommandPool m_commandPool = VK_NULL_HANDLE;
|
|
QueueFamilyIndices m_queueIndices;
|
|
};
|