diff options
-rw-r--r-- | include/mbgl/platform/default/glfw_view.hpp | 5 | ||||
-rw-r--r-- | include/mbgl/util/timer.hpp (renamed from src/mbgl/util/timer.hpp) | 0 | ||||
-rw-r--r-- | platform/default/glfw_view.cpp | 17 |
3 files changed, 19 insertions, 3 deletions
diff --git a/include/mbgl/platform/default/glfw_view.hpp b/include/mbgl/platform/default/glfw_view.hpp index ae5bf340d5..802f61b0c0 100644 --- a/include/mbgl/platform/default/glfw_view.hpp +++ b/include/mbgl/platform/default/glfw_view.hpp @@ -2,6 +2,8 @@ #define MBGL_COMMON_GLFW_VIEW #include <mbgl/mbgl.hpp> +#include <mbgl/util/run_loop.hpp> +#include <mbgl/util/timer.hpp> #ifdef MBGL_USE_GLES2 #define GLFW_INCLUDE_ES2 @@ -92,6 +94,9 @@ private: std::function<void()> changeStyleCallback; + mbgl::util::RunLoop runLoop; + mbgl::util::Timer frameTick; + GLFWwindow *window = nullptr; std::atomic_flag clean = ATOMIC_FLAG_INIT; }; diff --git a/src/mbgl/util/timer.hpp b/include/mbgl/util/timer.hpp index 783241847d..783241847d 100644 --- a/src/mbgl/util/timer.hpp +++ b/include/mbgl/util/timer.hpp diff --git a/platform/default/glfw_view.cpp b/platform/default/glfw_view.cpp index 6a7e798625..e65693c4c0 100644 --- a/platform/default/glfw_view.cpp +++ b/platform/default/glfw_view.cpp @@ -419,8 +419,16 @@ void GLFWView::onMouseMove(GLFWwindow *window, double x, double y) { } void GLFWView::run() { - while (!glfwWindowShouldClose(window)) { - glfwWaitEvents(); + auto callback = [&] { + if (glfwWindowShouldClose(window)) { + frameTick.stop(); + runLoop.stop(); + + return; + } + + glfwPollEvents(); + const bool dirty = !clean.test_and_set(); if (dirty) { const double started = glfwGetTime(); @@ -430,7 +438,10 @@ void GLFWView::run() { map->update(mbgl::Update::Repaint); } } - } + }; + + frameTick.start(mbgl::Duration::zero(), mbgl::Milliseconds(1000 / 60), callback); + runLoop.run(); } float GLFWView::getPixelRatio() const { |