diff --git a/fggl/app.cpp b/fggl/app.cpp index ee3c294474b9ebe0abd489bee5a752439ad0ced0..8f3e3d65a17f8ac02c3a28d4dc287a98d1e6f1a6 100644 --- a/fggl/app.cpp +++ b/fggl/app.cpp @@ -49,6 +49,8 @@ namespace fggl { m_window->frameEnd(); m_modules->onFrameEnd(); + + m_running = m_running && !m_window->wantClose(); } } diff --git a/fggl/gfx/window.cpp b/fggl/gfx/window.cpp index c5097c346a8c79bd3561cc6d5b083dcd45cf462b..a3cd4113041ba35d7f82981a29f33b91375a65ec 100644 --- a/fggl/gfx/window.cpp +++ b/fggl/gfx/window.cpp @@ -250,9 +250,16 @@ void GlfwWindow::activate() const { assert( m_window != nullptr ); glfwMakeContextCurrent(m_window); } + fggl::math::vec2i GlfwWindow::frameSize() const { assert( m_window != nullptr ); math::vec2i size; glfwGetFramebufferSize(m_window, &size.x, &size.y); return size; } + +bool GlfwWindow::wantClose() const { + assert( m_window != nullptr ); + return glfwWindowShouldClose(m_window) == GLFW_TRUE; +} + diff --git a/include/fggl/gfx/window.hpp b/include/fggl/gfx/window.hpp index 73c84080e314ca089665de9889d60ad6ca3494ae..3b24e29f88f45a0f45b2c0841dd79f5cf114ee90 100644 --- a/include/fggl/gfx/window.hpp +++ b/include/fggl/gfx/window.hpp @@ -49,7 +49,11 @@ namespace fggl::gfx { GlfwWindow(Window &) = delete; GlfwWindow(Window &&) = delete; - virtual math::vec2i frameSize() const override; + [[nodiscard]] + math::vec2i frameSize() const override; + + [[nodiscard]] + bool wantClose() const override; // window <-> opengl stuff void activate() const override; diff --git a/include/fggl/gfx/windowing.hpp b/include/fggl/gfx/windowing.hpp index 640555363c5e7baed1bc3e872dc85e10765f17e2..33e9f07ce9ae127c1550922798cfa93b1d53db5c 100644 --- a/include/fggl/gfx/windowing.hpp +++ b/include/fggl/gfx/windowing.hpp @@ -26,10 +26,14 @@ namespace fggl::gfx { m_graphics = std::make_unique<T>(*this); } - // window-related + // window-related getters [[nodiscard]] virtual math::vec2i frameSize() const = 0; + [[nodiscard]] + virtual bool wantClose() const = 0; + + // window callbacks virtual void frameStart() = 0; virtual void frameEnd() = 0;