#ifndef VK_H #define VK_H #include #include #include "PhysicalDevice.h" #include "Surface.h" #include "Queue.h" #include class Vulkan { public: void init(GLFWwindow* window); // инициализация void destroy(); // завершение работы void renderFrame(); // рендер кадра VkBuffer createDataBuffer(void* data, VkDeviceSize size, VkBufferUsageFlags usage); // Создание буфера данных void destroyBuffer(VkBuffer buffer); // Уничтожение буфера и освобождение его памяти private: VkInstance instance; // Экземпляр Vulkan PhysicalDevice physicalDevice; // Физическое устройство VkDevice logicalDevice; // логическое устройство Queue queue; // очередь Surface surface; // Поверхность окна VkSwapchainKHR swapChain; // Список показа std::vector swapChainImages; // Изображения из списка показа std::vector swapChainImageViews; // Информация об изображениях из списка показа std::vector swapChainFramebuffers; // Буферы кадра из списка показа VkRenderPass renderPass; // Проходы рендера VkPipelineLayout pipelineLayout; // Раскладка конвейера VkPipeline graphicsPipeline; // Графический конвейер VkCommandPool commandPool; // Пул команд std::vector commandBuffers; // Буферы команд VkBuffer vertexBuffer; // Буфер вершин VkBuffer indexBuffer; // Буфер индексов std::vector imageAvailableSemaphores; // семафор доступности изображения std::vector renderFinishedSemaphores; // семафор окончания рендера std::vector inWorkFences; // барьер кадра в работе uint32_t currentFrame = 0; // Текущий кадр рендера uint32_t imageIndex; // Текущее изображение из списка показа std::map> databuffers; // Словарь для сопоставления дескриптору буфера дескрипторов лог. устройства и памяти // Структура для хранения флагов struct { const bool VALIDATION = true; // Использование слоев проверки } states; void createInstance(); // Создание экземпяра Vulkan void selectPhysicalDevice(std::vector &deviceExtensions); // Выбор физического устройства void pickQueues(); // Выбор очередей void createLogicalDevice(std::vector &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(); // Создание буферов кадра void renderBegin(); // Начало рендера кадра void renderEnd(); // Окончание рендера кадра }; #endif // VK_H