diff --git a/src/main.c b/src/main.c index 8749ec7..7957003 100644 --- a/src/main.c +++ b/src/main.c @@ -1,18 +1,45 @@ #include #include #include +#include #define GLFW_INCLUDE_VULKAN #include typedef struct Application { GLFWwindow *window; + VkInstance instance; } Application; -void initWindow(Application *app); -void initVulkan(); -void mainLoop(Application *app); -void cleanup(Application *app); +void createInstance(Application *app) { + 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; + + glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount); + + createInfo.enabledExtensionCount = glfwExtensionCount; + createInfo.ppEnabledExtensionNames = glfwExtensions; + + createInfo.enabledLayerCount = 0; + + VkResult result = vkCreateInstance(&createInfo, NULL, &app->instance); + if (result != VK_SUCCESS){ + fprintf(stderr, "Failed to create vulkan instance"); + exit(EXIT_FAILURE); + } +} void initWindow(Application *app) { glfwInit(); @@ -20,7 +47,7 @@ void initWindow(Application *app) { glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); app->window = glfwCreateWindow(800, 600, "Vulkan", NULL, NULL); } -void initVulkan() {} +void initVulkan(Application *app) { createInstance(app); } void mainLoop(Application *app) { while (!glfwWindowShouldClose(app->window)) { glfwPollEvents(); @@ -35,7 +62,7 @@ int main(void) { Application app; initWindow(&app); - initVulkan(); + initVulkan(&app); mainLoop(&app); cleanup(&app);