X-Git-Url: https://eleni.mutantstargoat.com/git/?p=demo;a=blobdiff_plain;f=src%2Fvulkan%2Fvk.cc;h=b29c542da7b1a47de1e372a9d8b9f8fd6b234339;hp=871824fef12a14cc084f1fa04ab805c21f27c79e;hb=72995482b98ff2a014ddd737131a0935ead89977;hpb=9148ff7614b1dc22fd5d1dcf6d74e2fb4ff13706 diff --git a/src/vulkan/vk.cc b/src/vulkan/vk.cc index 871824f..b29c542 100644 --- a/src/vulkan/vk.cc +++ b/src/vulkan/vk.cc @@ -17,6 +17,10 @@ extern int win_h; /* static functions */ static void error_callback(int error, const char *descr); +static void clear(float r, float g, float b); +static void viewport(int x, int y, int width, int height); +static void zbuffer(bool enable); +static void cull_face(Gfx_cull_face cf); static void reshape(int width, int height); bool init_vulkan() @@ -54,6 +58,39 @@ bool init_vulkan() return false; } + if(!(vkswapchain = vku_create_swapchain(vksurface, win_w, win_h, 2, + VK_PRESENT_MODE_FIFO_KHR, 0))) { + fprintf(stderr, "Failed to create swapchain.\n"); + return false; + } + + vkswapchain_images = vku_get_swapchain_images(vkswapchain, &vknum_swapchain_images); + if(!vkswapchain_images) { + fprintf(stderr, "Failed to get swapchain images.\n"); + return false; + } + + vkswapchain_views = vku_create_image_views(vkswapchain_images, vknum_swapchain_images); + if(!vkswapchain_views) { + fprintf(stderr, "Failed to create swapchain image views.\n"); + delete [] vkswapchain_images; + return false; + } + + if(!vku_create_renderpass()) { + fprintf(stderr, "Failed to create renderpass'\n"); + return false; + } + + if(!vku_create_framebuffers(vkswapchain_views, vknum_swapchain_images, win_w, win_h)) { + fprintf(stderr, "Failed to create framebuffers.\n"); + return false; + } + + gfx_clear = clear; + gfx_viewport = viewport; + gfx_zbuffer = zbuffer; + gfx_cull_face = cull_face; gfx_reshape = reshape; return true; @@ -61,10 +98,16 @@ bool init_vulkan() void cleanup_vulkan() { + if(win) { + glfwDestroyWindow(win); + } + glfwTerminate(); + //TODOs according to the book: // 1- make sure all threads have been terminated (when I add threads) // 2- destroy objects in *reverse* order + vkDestroyRenderPass(vkdev, vkrpass, 0); vkDestroySurfaceKHR(vkinst, vksurface, 0); vku_cleanup(); @@ -85,7 +128,23 @@ static void reshape(int width, int height) } vkswapchain = sc; - free(vkswapchain_images); + delete [] vkswapchain_images; vkswapchain_images = vku_get_swapchain_images(sc, 0); vknext_swapchain_image = vku_get_next_image(vkswapchain); -} \ No newline at end of file +} + +static void clear(float r, float g, float b) +{ +} + +static void viewport(int x, int y, int width, int height) +{ +} + +static void zbuffer(bool enable) +{ +} + +static void cull_face(Gfx_cull_face cf) +{ +}