
1 changed files with 101 additions and 0 deletions
@ -0,0 +1,101 @@ |
|||
#define GLFW_INCLUDE_VULKAN |
|||
#include <GLFW/glfw3.h> |
|||
|
|||
#include <iostream> |
|||
#include <stdexcept> |
|||
#include <cstdlib> |
|||
#include <vector> |
|||
|
|||
const uint32_t WIDTH = 800; |
|||
const uint32_t HEIGHT = 600; |
|||
|
|||
class HelloTriangleApplication { |
|||
public: |
|||
void run() |
|||
{ |
|||
initWindow(); |
|||
initVulkan(); |
|||
mainLoop(); |
|||
cleanup(); |
|||
} |
|||
|
|||
private: |
|||
GLFWwindow* window; |
|||
VkInstance instance; |
|||
|
|||
void initWindow() |
|||
{ |
|||
glfwInit(); |
|||
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); |
|||
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); |
|||
window = glfwCreateWindow(WIDTH, HEIGHT, "Vulkan", nullptr, nullptr); |
|||
} |
|||
|
|||
void initVulkan() |
|||
{ |
|||
createInstance(); |
|||
} |
|||
|
|||
void mainLoop() |
|||
{ |
|||
while (!glfwWindowShouldClose(window)) { |
|||
glfwPollEvents(); |
|||
} |
|||
} |
|||
|
|||
void cleanup() |
|||
{ |
|||
vkDestroyInstance(instance, nullptr); |
|||
glfwDestroyWindow(window); |
|||
glfwTerminate(); |
|||
} |
|||
|
|||
void createInstance() |
|||
{ |
|||
VkApplicationInfo appInfo{}; |
|||
appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; |
|||
appInfo.pApplicationName = "Hello Triangle"; |
|||
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; |
|||
|
|||
uint32_t glfwExtensionCount = 0; |
|||
const char** glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount); |
|||
createInfo.enabledExtensionCount = glfwExtensionCount; |
|||
createInfo.ppEnabledExtensionNames = glfwExtensions; |
|||
createInfo.enabledLayerCount = 0; |
|||
|
|||
std::vector<const char*> requiredExtensions{}; |
|||
for (uint32_t i = 0; i < glfwExtensionCount; i++) { |
|||
requiredExtensions.emplace_back(glfwExtensions[i]); |
|||
} |
|||
requiredExtensions.emplace_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME); |
|||
|
|||
createInfo.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; |
|||
createInfo.enabledExtensionCount = (uint32_t)requiredExtensions.size(); |
|||
createInfo.ppEnabledExtensionNames = requiredExtensions.data(); |
|||
|
|||
if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) { |
|||
throw std::runtime_error("failed to create instance!"); |
|||
} |
|||
} |
|||
}; |
|||
|
|||
int main() |
|||
{ |
|||
HelloTriangleApplication app{}; |
|||
|
|||
try { |
|||
app.run(); |
|||
} catch (const std::exception& e) { |
|||
std::cerr << e.what() << std::endl; |
|||
return EXIT_FAILURE; |
|||
} |
|||
|
|||
return EXIT_SUCCESS; |
|||
} |
Loading…
Reference in new issue