07/include/vk.h

76 lines
4.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef VK_H
#define VK_H
#include <vulkan/vulkan.h>
#include <GLFW/glfw3.h>
#include "PhysicalDevice.h"
#include "Surface.h"
#include "Queue.h"
#include <map>
#include <list>
#include "Model.h"
class Vulkan
{
public:
void init(GLFWwindow* window); // инициализация
void destroy(); // завершение работы
void renderFrame(); // рендер кадра
void renderBegin(); // Начало рендера кадра
void renderEnd(); // Окончание рендера кадра
VkBuffer createDataBuffer(void* data, VkDeviceSize size, VkBufferUsageFlags usage); // Создание буфера данных
void destroyBuffer(VkBuffer buffer); // Уничтожение буфера и освобождение его памяти
void addToRenderList(I_Model* model); // Добавление модели в список рендера
void removeFromRenderList(I_Model* model); // Удалеие модели из список рендера
void clearRenderList(); // Очистка списка рендера моделей
private:
VkInstance instance; // Экземпляр Vulkan
PhysicalDevice physicalDevice; // Физическое устройство
VkDevice logicalDevice; // логическое устройство
Queue queue; // очередь
Surface surface; // Поверхность окна
VkSwapchainKHR swapChain; // Список показа
std::vector<VkImage> swapChainImages; // Изображения из списка показа
std::vector<VkImageView> swapChainImageViews; // Информация об изображениях из списка показа
std::vector<VkFramebuffer> swapChainFramebuffers; // Буферы кадра из списка показа
VkRenderPass renderPass; // Проходы рендера
VkPipelineLayout pipelineLayout; // Раскладка конвейера
VkPipeline graphicsPipeline; // Графический конвейер
VkCommandPool commandPool; // Пул команд
std::vector<VkCommandBuffer> commandBuffers; // Буферы команд
std::vector<VkSemaphore> imageAvailableSemaphores; // семафор доступности изображения
std::vector<VkSemaphore> renderFinishedSemaphores; // семафор окончания рендера
std::vector<VkFence> inWorkFences; // барьер кадра в работе
uint32_t currentFrame = 0; // Текущий кадр рендера
uint32_t imageIndex; // Текущее изображение из списка показа
std::map<VkBuffer, std::pair<VkDevice, VkDeviceMemory>> databuffers; // Словарь для сопоставления дескриптору буфера дескрипторов лог. устройства и памяти
std::list<I_Model*> renderList; // Спискок моделей для рендера
// Структура для хранения флагов
struct
{
const bool VALIDATION = true; // Использование слоев проверки
} states;
void createInstance(); // Создание экземпяра Vulkan
void selectPhysicalDevice(std::vector<const char*> &deviceExtensions); // Выбор физического устройства
void pickQueues(); // Выбор очередей
void createLogicalDevice(std::vector<const char*> &deviceExtensions); // Создание логического устройства
void createWindowSurface(GLFWwindow* window); // Создание поверхности окна
void createSwapchain(GLFWwindow* window); // Создание цепочки показа
void createRenderpass(); // Создание проходов рендера
VkShaderModule createShaderModule(const char * filename); // Создание шейдерного модуля
void createGraphicPipeline(); // Создание графического конвеера
void createBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer); // Создание произвольного буфера данных
void createCommandPool(); // Создание пула команд
void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size); // Копирование между буферами данных
void createSyncObjects(); // Создание объектов синхронизации
void createFramebuffers(); // Создание буферов кадра
};
#endif // VK_H