diff options
author | Chuyan Zhang <me@zcy.moe> | 2024-09-07 00:40:38 -0700 |
---|---|---|
committer | Chuyan Zhang <me@zcy.moe> | 2024-09-07 00:40:38 -0700 |
commit | 2ead02037dc89e987fbc0a021fe470e29d226cfd (patch) | |
tree | 473011eda50080299be844e69f82cec75aa4fb95 /src/app.cpp | |
parent | e12ca33626bdadedc3158cb69f2a4d2f9bbeeeb0 (diff) | |
download | iris-2ead02037dc89e987fbc0a021fe470e29d226cfd.tar.gz iris-2ead02037dc89e987fbc0a021fe470e29d226cfd.zip |
Add more encapsulation, use VMA for allocation
Diffstat (limited to 'src/app.cpp')
-rw-r--r-- | src/app.cpp | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/src/app.cpp b/src/app.cpp index b3df2a5..a5b3247 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -1,9 +1,9 @@ #include "vulkan_swapchain.h" -#include "imgui.h" -#include "imgui_impl_glfw.h" #include "imgui_impl_vulkan.h" #include "argparse/argparse.hpp" +#include <cstdint> +#include <sys/types.h> #define GLFW_INCLUDE_VULKAN #include <GLFW/glfw3.h> @@ -15,12 +15,6 @@ std::unique_ptr<iris::Swapchain> start_up(int width, int height) { auto glfw_extensions = get_glfw_instance_extensions(); - // std::vector<const char*> glfw_extensions = { - // "VK_KHR_surface", - // }; - // for (const auto& extension : glfw_extensions) { - // std::cerr << "GLFW extension: " << extension << std::endl; - // } iris::Device device({}, glfw_extensions); auto window = glfwCreateWindow(width, height, "IrisRenderer", nullptr, nullptr); @@ -31,10 +25,6 @@ std::unique_ptr<iris::Swapchain> start_up(int width, int height) { return std::make_unique<iris::Swapchain>(window, device); } -void main_loop(GLFWwindow *window) { - (void) window; -} - void shut_down(std::unique_ptr<iris::Swapchain>& swapchain) { ImGui_ImplVulkan_Shutdown(); @@ -77,7 +67,23 @@ int main(int argc, char** argv) { auto swapchain = start_up(window_width, window_height); while (!glfwWindowShouldClose(swapchain->window)) { - main_loop(swapchain->window); + glfwPollEvents(); + + int display_w, display_h; + glfwGetFramebufferSize(swapchain->window, &display_w, &display_h); + if (display_w == 0 || display_h == 0) { + break; + } + + swapchain->needs_recreate |= + (uint32_t) display_w != swapchain->width || + (uint32_t) display_h != swapchain->height; + if (swapchain->needs_recreate) { + swapchain->resize(display_w, display_h); + swapchain->needs_recreate = false; + } + + ImGui_ImplVulkan_NewFrame(); } shut_down(swapchain); |