Создание экземпляра Vulkan
This commit is contained in:
parent
35cdc26f56
commit
8887ee67fd
|
@ -0,0 +1,24 @@
|
||||||
|
#ifndef VK_H
|
||||||
|
#define VK_H
|
||||||
|
|
||||||
|
#include <vulkan/vulkan.h>
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
class Vulkan
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void init(); // инициализация
|
||||||
|
void destroy(); // завершение работы
|
||||||
|
private:
|
||||||
|
VkInstance instance; // Экземпляр Vulkan
|
||||||
|
// Структура для хранения флагов
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
const bool VALIDATION = 1; // Использование слоев проверки
|
||||||
|
} states;
|
||||||
|
|
||||||
|
|
||||||
|
void createInstance(); //
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // VK_H
|
19
src/main.cpp
19
src/main.cpp
|
@ -1,9 +1,10 @@
|
||||||
#include <vulkan/vulkan.h>
|
#include "vk.h"
|
||||||
|
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
void vkInit();
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
// Инициализация GLFW
|
// Инициализация GLFW
|
||||||
|
@ -12,6 +13,9 @@ int main(int argc, char* argv[]) {
|
||||||
// Проверка доступности Vulkan
|
// Проверка доступности Vulkan
|
||||||
if (glfwVulkanSupported())
|
if (glfwVulkanSupported())
|
||||||
{
|
{
|
||||||
|
// объект класса-обертки Vulkan API
|
||||||
|
Vulkan vulkan;
|
||||||
|
|
||||||
// Отключим создание контекста
|
// Отключим создание контекста
|
||||||
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
|
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
|
||||||
// Отключим возможность изменения размеров окна
|
// Отключим возможность изменения размеров окна
|
||||||
|
@ -19,6 +23,9 @@ 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.init();
|
||||||
|
|
||||||
// Жизненный цикл
|
// Жизненный цикл
|
||||||
while(!glfwWindowShouldClose(window)) {
|
while(!glfwWindowShouldClose(window)) {
|
||||||
// Обработка событий
|
// Обработка событий
|
||||||
|
@ -27,6 +34,9 @@ int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
// Уничтожение окна
|
// Уничтожение окна
|
||||||
glfwDestroyWindow(window);
|
glfwDestroyWindow(window);
|
||||||
|
|
||||||
|
// Завершение работы с Vulkan
|
||||||
|
vulkan.destroy();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
std::cout << "There is no Vulkan Supported\n";
|
std::cout << "There is no Vulkan Supported\n";
|
||||||
|
@ -36,3 +46,8 @@ int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
#include "vk.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
|
void Vulkan::init()
|
||||||
|
{
|
||||||
|
createInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Vulkan::destroy()
|
||||||
|
{
|
||||||
|
vkDestroyInstance(instance, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Vulkan::createInstance()
|
||||||
|
{
|
||||||
|
// Структура с данными о приложении
|
||||||
|
VkApplicationInfo appInfo{};
|
||||||
|
appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
|
||||||
|
appInfo.pApplicationName = "Vulkan Notes";
|
||||||
|
appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
|
||||||
|
appInfo.pEngineName = "No Engine";
|
||||||
|
appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
|
||||||
|
appInfo.apiVersion = VK_API_VERSION_1_0;
|
||||||
|
|
||||||
|
// Структура с данными
|
||||||
|
VkInstanceCreateInfo createInfo{};
|
||||||
|
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
|
||||||
|
createInfo.pApplicationInfo = &appInfo;
|
||||||
|
|
||||||
|
// Расширения для glfw
|
||||||
|
uint32_t glfwExtensionCount = 0;
|
||||||
|
const char** glfwExtensions;
|
||||||
|
glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount);
|
||||||
|
// Инициализируем вектор расширений тем, что требуется для glfw
|
||||||
|
std::vector<const char*> extensions(glfwExtensions, glfwExtensions + glfwExtensionCount);
|
||||||
|
|
||||||
|
// Подключение других расширений
|
||||||
|
// extensions.push_back(ИМЯ_РАСШИРЕНИЯ);
|
||||||
|
|
||||||
|
// Запишем данные об используемых расширениях в структуру
|
||||||
|
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
|
||||||
|
createInfo.ppEnabledExtensionNames = extensions.data();
|
||||||
|
|
||||||
|
VkResult result = vkCreateInstance(&createInfo, nullptr, &instance);
|
||||||
|
if (result != VK_SUCCESS) {
|
||||||
|
throw std::runtime_error("Instance create error");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue