From 76f2069b78fe369a3eba03a16218d352e3e51b53 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Mon, 16 Oct 2023 09:27:33 -0400 Subject: checkpoint - get current monitor's refresh rate --- src/main.cpp | 4 ++++ src/window.cpp | 21 +++++++++++++++++++++ src/window.hpp | 2 ++ 3 files changed, 27 insertions(+) (limited to 'src') diff --git a/src/main.cpp b/src/main.cpp index ec0bf71..bd9dee0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -53,6 +53,10 @@ int main() { std::this_thread::sleep_until(lastTimePoint + GameTimeDuration(nsAhead + 1)); nsAhead = 0; } + if (vidMode.refreshRate != pkeSettings.targetFPS) { + pkeSettings.targetFPS = vidMode.refreshRate; + pkeSettings.deltaPerFrame = 1 / double(pkeSettings.targetFPS); + } GameTimePoint currentTimePoint = pkeSettings.steadyClock.now(); double deltaThisTick = (currentTimePoint - lastTimePoint).count() / NANO_DENOM_DOUBLE; diff --git a/src/window.cpp b/src/window.cpp index c7b9dba..2a1b905 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -27,6 +27,8 @@ const bool VULKAN_DEBUG_REPORT = true; * Initialization */ GLFWwindow *window = nullptr; +GLFWmonitor *monitor = nullptr; +GLFWvidmode vidMode; VkInstance vkInstance = nullptr; VkPhysicalDevice vkPhysicalDevice = nullptr; VkPhysicalDeviceProperties vkPhysicalDeviceProperties; @@ -2323,6 +2325,22 @@ void DestroySwapchain() { vkDestroySwapchainKHR(vkDevice, vkSwapchainKHR, vkAllocator); } +void DetermineMonitor() { + int monitorCount; + GLFWmonitor **monitors = glfwGetMonitors(&monitorCount); + assert(monitors != nullptr); + // TODO - actually determine monitor + monitor = monitors[0]; + + const auto *videoMode = glfwGetVideoMode(monitor); + vidMode.width = videoMode->width; + vidMode.height = videoMode->height; + vidMode.redBits = videoMode->redBits; + vidMode.greenBits = videoMode->greenBits; + vidMode.blueBits = videoMode->blueBits; + vidMode.refreshRate = videoMode->refreshRate; +} + void RecreateSwapchain() { int width, height = 0; glfwGetFramebufferSize(window, &width, &height); @@ -2332,6 +2350,7 @@ void RecreateSwapchain() { } extent.width = width; extent.height = height; + DetermineMonitor(); vkDeviceWaitIdle(vkDevice); DestroySwapchain(); CreateSwapchain(); @@ -2368,6 +2387,8 @@ void CreateWindow(PKEWindowProperties *wp) { CreateGraphicsPipelines(); UpdateDebugGraphicsPipeline(); CreateImGui(); + + DetermineMonitor(); } void DestroyWindow() { diff --git a/src/window.hpp b/src/window.hpp index 91f9929..ab07a8b 100644 --- a/src/window.hpp +++ b/src/window.hpp @@ -21,6 +21,8 @@ const unsigned int MAX_FRAMES_IN_FLIGHT = 3; extern GLFWwindow *window; +extern GLFWmonitor *monitor; +extern GLFWvidmode vidMode; extern VkInstance vkInstance; extern VkPhysicalDevice vkPhysicalDevice; extern VkPhysicalDeviceProperties vkPhysicalDeviceProperties; -- cgit v1.2.3