Создание поверхности окна
This commit is contained in:
parent
0842a12289
commit
4ab10c356c
|
@ -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
|
|
@ -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)) {
|
||||
|
|
13
src/vk.cpp
13
src/vk.cpp
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue