quick backup
[demo] / src / vulkan / vk.cc
index 871824f..b29c542 100644 (file)
@@ -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)
+{
+}