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

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

View File

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

View File

@ -5,18 +5,20 @@
#include <stdexcept>
// инициализация
void Vulkan::init()
void Vulkan::init(GLFWwindow* window)
{
createInstance(); // Создание экземпяра
// Расширения для устройства: имена задаются внутри фигурных скобок в кавычках
std::vector<const char*> deviceExtensions({});
selectPhysicalDevice(deviceExtensions); // Выбор физического устройства
createLogicalDevice(deviceExtensions); // Создание физического устройства
createWindowSurface(window);
}
// завершение работы
void Vulkan::destroy()
{
vkDestroySurfaceKHR(instance, surface, nullptr);
vkDestroyDevice(logicalDevice, nullptr); // Уничтожение логического устройства
vkDestroyInstance(instance, nullptr); // Уничтожение экземпляра Vulkan
}
@ -285,3 +287,12 @@ void Vulkan::createLogicalDevice(std::vector<const char*> &deviceExtensions)
// Получим дескриптор очереди логического устройства
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");
}
}