Создание поверхности окна

This commit is contained in:
parent 0842a12289
commit 4ab10c356c
3 changed files with 16 additions and 3 deletions

View File

@ -9,13 +9,14 @@
class Vulkan class Vulkan
{ {
public: public:
void init(); // инициализация void init(GLFWwindow* window); // инициализация
void destroy(); // завершение работы void destroy(); // завершение работы
private: private:
VkInstance instance; // Экземпляр Vulkan VkInstance instance; // Экземпляр Vulkan
PhysicalDevice physicalDevice; // Физическое устройство PhysicalDevice physicalDevice; // Физическое устройство
VkDevice logicalDevice; // логическое устройство VkDevice logicalDevice; // логическое устройство
VkQueue graphicalQueue; // очередь для работы с графикой VkQueue graphicalQueue; // очередь для работы с графикой
VkSurfaceKHR surface; // Поверхность окна
// Структура для хранения флагов // Структура для хранения флагов
struct struct
{ {
@ -26,6 +27,7 @@ class Vulkan
void createInstance(); // Создание экземпяра Vulkan void createInstance(); // Создание экземпяра Vulkan
void selectPhysicalDevice(std::vector<const char*> &deviceExtensions); // Выбор физического устройства void selectPhysicalDevice(std::vector<const char*> &deviceExtensions); // Выбор физического устройства
void createLogicalDevice(std::vector<const char*> &deviceExtensions); // Создание логического устройства void createLogicalDevice(std::vector<const char*> &deviceExtensions); // Создание логического устройства
void createWindowSurface(GLFWwindow* window); // Создание поверхности окна
}; };
#endif // VK_H #endif // VK_H

View File

@ -24,7 +24,7 @@ int main(int argc, char* argv[]) {
GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", nullptr, nullptr); GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", nullptr, nullptr);
// Инициализация Vulkan API // Инициализация Vulkan API
vulkan.init(); vulkan.init(window);
// Жизненный цикл // Жизненный цикл
while(!glfwWindowShouldClose(window)) { while(!glfwWindowShouldClose(window)) {

View File

@ -5,18 +5,20 @@
#include <stdexcept> #include <stdexcept>
// инициализация // инициализация
void Vulkan::init() void Vulkan::init(GLFWwindow* window)
{ {
createInstance(); // Создание экземпяра createInstance(); // Создание экземпяра
// Расширения для устройства: имена задаются внутри фигурных скобок в кавычках // Расширения для устройства: имена задаются внутри фигурных скобок в кавычках
std::vector<const char*> deviceExtensions({}); std::vector<const char*> deviceExtensions({});
selectPhysicalDevice(deviceExtensions); // Выбор физического устройства selectPhysicalDevice(deviceExtensions); // Выбор физического устройства
createLogicalDevice(deviceExtensions); // Создание физического устройства createLogicalDevice(deviceExtensions); // Создание физического устройства
createWindowSurface(window);
} }
// завершение работы // завершение работы
void Vulkan::destroy() void Vulkan::destroy()
{ {
vkDestroySurfaceKHR(instance, surface, nullptr);
vkDestroyDevice(logicalDevice, nullptr); // Уничтожение логического устройства vkDestroyDevice(logicalDevice, nullptr); // Уничтожение логического устройства
vkDestroyInstance(instance, nullptr); // Уничтожение экземпляра Vulkan vkDestroyInstance(instance, nullptr); // Уничтожение экземпляра Vulkan
} }
@ -285,3 +287,12 @@ void Vulkan::createLogicalDevice(std::vector<const char*> &deviceExtensions)
// Получим дескриптор очереди логического устройства // Получим дескриптор очереди логического устройства
vkGetDeviceQueue(logicalDevice, queueCreateInfo.queueFamilyIndex, 0, &graphicalQueue); vkGetDeviceQueue(logicalDevice, queueCreateInfo.queueFamilyIndex, 0, &graphicalQueue);
} }
// Создание поверхности окна
void Vulkan::createWindowSurface(GLFWwindow* window)
{
if (glfwCreateWindowSurface(instance, window, nullptr, &surface) != VK_SUCCESS)
{
throw std::runtime_error("Unable to create window surface");
}
}