Use GLFW swap interval for force vsync to monitor

This commit is contained in:
Doyle Thai 2016-06-17 16:32:59 +10:00
parent 9861a02ed1
commit c54e6323a7

View File

@ -92,14 +92,19 @@ int main()
glfwSetWindowUserPointer(window, static_cast<void *>(&game)); glfwSetWindowUserPointer(window, static_cast<void *>(&game));
f32 startTime = static_cast<f32>(glfwGetTime());
f32 secondsElapsed = 0.0f; // Time between current frame and last frame f32 secondsElapsed = 0.0f; // Time between current frame and last frame
#if 0
// TODO(doyle): Get actual monitor refresh rate // TODO(doyle): Get actual monitor refresh rate
i32 monitorRefreshHz = 60; i32 monitorRefreshHz = 60;
f32 targetSecondsPerFrame = 1.0f / static_cast<f32>(monitorRefreshHz); f32 targetSecondsPerFrame = 1.0f / static_cast<f32>(monitorRefreshHz);
f32 startTime = static_cast<f32>(glfwGetTime()); #else
// TODO(doyle): http://gafferongames.com/game-physics/fix-your-timestep/
//glfwSwapInterval(1); // NOTE(doyle): Prevent glfwSwapBuffer until a vertical retrace has
// occurred, i.e. limit framerate to monitor refresh rate
glfwSwapInterval(1);
#endif
/* Main game loop */ /* Main game loop */
while (!glfwWindowShouldClose(window)) while (!glfwWindowShouldClose(window))
@ -120,15 +125,17 @@ int main()
/* Swap the buffers */ /* Swap the buffers */
glfwSwapBuffers(window); glfwSwapBuffers(window);
f32 endTime = static_cast<f32>(glfwGetTime()); f32 endTime = static_cast<f32>(glfwGetTime());
secondsElapsed = endTime - startTime; secondsElapsed = endTime - startTime;
#if 0
// TODO(doyle): Busy waiting, should sleep // TODO(doyle): Busy waiting, should sleep
while (secondsElapsed < targetSecondsPerFrame) while (secondsElapsed < targetSecondsPerFrame)
{ {
endTime = static_cast<f32>(glfwGetTime()); endTime = static_cast<f32>(glfwGetTime());
secondsElapsed = endTime - startTime; secondsElapsed = endTime - startTime;
} }
#endif
LOCAL_PERSIST f32 titleUpdateFrequencyInSeconds = 0.5f; LOCAL_PERSIST f32 titleUpdateFrequencyInSeconds = 0.5f;