diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-16 09:27:33 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-16 09:27:33 -0400 |
| commit | 76f2069b78fe369a3eba03a16218d352e3e51b53 (patch) | |
| tree | c3add8dbc25a7ecf62130aa42ef76da990baa354 /src | |
| parent | 611eba4565b6f25881a6294696ea10492c025ec4 (diff) | |
checkpoint - get current monitor's refresh rate
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.cpp | 4 | ||||
| -rw-r--r-- | src/window.cpp | 21 | ||||
| -rw-r--r-- | src/window.hpp | 2 |
3 files changed, 27 insertions, 0 deletions
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; |
