summaryrefslogtreecommitdiff
path: root/src/app.cpp
diff options
context:
space:
mode:
authorChuyan Zhang <me@zcy.moe>2024-09-07 00:40:38 -0700
committerChuyan Zhang <me@zcy.moe>2024-09-07 00:40:38 -0700
commit2ead02037dc89e987fbc0a021fe470e29d226cfd (patch)
tree473011eda50080299be844e69f82cec75aa4fb95 /src/app.cpp
parente12ca33626bdadedc3158cb69f2a4d2f9bbeeeb0 (diff)
downloadiris-2ead02037dc89e987fbc0a021fe470e29d226cfd.tar.gz
iris-2ead02037dc89e987fbc0a021fe470e29d226cfd.zip
Add more encapsulation, use VMA for allocation
Diffstat (limited to 'src/app.cpp')
-rw-r--r--src/app.cpp32
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);