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