Создание экземпляра 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>
|
||||
|
||||
void vkInit();
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
|
||||
// Инициализация GLFW
|
||||
|
@ -12,6 +13,9 @@ int main(int argc, char* argv[]) {
|
|||
// Проверка доступности Vulkan
|
||||
if (glfwVulkanSupported())
|
||||
{
|
||||
// объект класса-обертки Vulkan API
|
||||
Vulkan vulkan;
|
||||
|
||||
// Отключим создание контекста
|
||||
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);
|
||||
|
||||
// Инициализация Vulkan API
|
||||
vulkan.init();
|
||||
|
||||
// Жизненный цикл
|
||||
while(!glfwWindowShouldClose(window)) {
|
||||
// Обработка событий
|
||||
|
@ -27,6 +34,9 @@ int main(int argc, char* argv[]) {
|
|||
|
||||
// Уничтожение окна
|
||||
glfwDestroyWindow(window);
|
||||
|
||||
// Завершение работы с Vulkan
|
||||
vulkan.destroy();
|
||||
}
|
||||
else
|
||||
std::cout << "There is no Vulkan Supported\n";
|
||||
|
@ -36,3 +46,8 @@ int main(int argc, char* argv[]) {
|
|||
|
||||
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