|
@@ -35,19 +35,25 @@
|
|
|
#include <math.h>
|
|
|
|
|
|
static int swap_interval;
|
|
|
+static double frame_rate;
|
|
|
|
|
|
-static void set_swap_interval(GLFWwindow* window, int interval)
|
|
|
+static void update_window_title(GLFWwindow* window)
|
|
|
{
|
|
|
char title[256];
|
|
|
|
|
|
- swap_interval = interval;
|
|
|
- glfwSwapInterval(swap_interval);
|
|
|
-
|
|
|
- sprintf(title, "Tearing detector (interval %i)", swap_interval);
|
|
|
+ sprintf(title, "Tearing detector (interval %i, %0.1f Hz)",
|
|
|
+ swap_interval, frame_rate);
|
|
|
|
|
|
glfwSetWindowTitle(window, title);
|
|
|
}
|
|
|
|
|
|
+static void set_swap_interval(GLFWwindow* window, int interval)
|
|
|
+{
|
|
|
+ swap_interval = interval;
|
|
|
+ glfwSwapInterval(swap_interval);
|
|
|
+ update_window_title(window);
|
|
|
+}
|
|
|
+
|
|
|
static void error_callback(int error, const char* description)
|
|
|
{
|
|
|
fprintf(stderr, "Error: %s\n", description);
|
|
@@ -67,6 +73,8 @@ static void key_callback(GLFWwindow* window, int key, int action)
|
|
|
int main(void)
|
|
|
{
|
|
|
float position;
|
|
|
+ unsigned long frame_count = 0;
|
|
|
+ double last_time, current_time;
|
|
|
GLFWwindow* window;
|
|
|
|
|
|
glfwSetErrorCallback(error_callback);
|
|
@@ -82,7 +90,10 @@ int main(void)
|
|
|
}
|
|
|
|
|
|
glfwMakeContextCurrent(window);
|
|
|
- set_swap_interval(window, swap_interval);
|
|
|
+ set_swap_interval(window, 0);
|
|
|
+
|
|
|
+ last_time = glfwGetTime();
|
|
|
+ frame_rate = 0.0;
|
|
|
|
|
|
glfwSetWindowSizeCallback(window, window_size_callback);
|
|
|
glfwSetKeyCallback(window, key_callback);
|
|
@@ -100,6 +111,17 @@ int main(void)
|
|
|
|
|
|
glfwSwapBuffers(window);
|
|
|
glfwPollEvents();
|
|
|
+
|
|
|
+ frame_count++;
|
|
|
+
|
|
|
+ current_time = glfwGetTime();
|
|
|
+ if (current_time - last_time > 1.0)
|
|
|
+ {
|
|
|
+ frame_rate = frame_count / (current_time - last_time);
|
|
|
+ frame_count = 0;
|
|
|
+ last_time = current_time;
|
|
|
+ update_window_title(window);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
glfwTerminate();
|