#ifndef VK_H #define VK_H #include #include #include "PhysicalDevice.h" #include "Surface.h" #include "Queue.h" class Vulkan { public: void init(GLFWwindow* window); // инициализация void destroy(); // завершение работы private: VkInstance instance; // Экземпляр Vulkan PhysicalDevice physicalDevice; // Физическое устройство VkDevice logicalDevice; // логическое устройство Queue queue; // очередь Surface surface; // Поверхность окна VkSwapchainKHR swapChain; // Список показа std::vector swapChainImages; // Изображения из списка показа std::vector swapChainImageViews; // Информация об изображениях из списка показа VkRenderPass renderPass; // Проходы рендера VkPipelineLayout pipelineLayout; // Раскладка конвейера VkPipeline graphicsPipeline; // Графический конвейер VkCommandPool commandPool; // Пул команд std::vector commandBuffers; // Буферы команд VkBuffer vertexBuffer; // Буфер вершин VkDeviceMemory vertexBufferMemory; // Память буфера вершин VkBuffer indexBuffer; // Буфер индексов VkDeviceMemory indexBufferMemory; // Память буфера индексов // Структура для хранения флагов 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, VkDeviceMemory& bufferMemory); // Создание произвольного буфера данных void createCommandPool(); // Создание пула команд void copyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size); // Копирование между буферами данных void createVertexBuffer(); // Создание буфера вершин void createIndexBuffer(); // Создание буфера индексов }; #endif // VK_H