فهرست منبع

Add window mode toggling to tearing test

Camilla Löwy 7 سال پیش
والد
کامیت
d81946a35b
2فایلهای تغییر یافته به همراه26 افزوده شده و 49 حذف شده
  1. 1 1
      tests/CMakeLists.txt
  2. 25 48
      tests/tearing.c

+ 1 - 1
tests/CMakeLists.txt

@@ -33,7 +33,7 @@ add_executable(icon WIN32 MACOSX_BUNDLE icon.c ${GLAD})
 add_executable(inputlag WIN32 MACOSX_BUNDLE inputlag.c ${GETOPT} ${GLAD})
 add_executable(joysticks WIN32 MACOSX_BUNDLE joysticks.c ${GLAD})
 add_executable(opacity WIN32 MACOSX_BUNDLE opacity.c ${GLAD})
-add_executable(tearing WIN32 MACOSX_BUNDLE tearing.c ${GETOPT} ${GLAD})
+add_executable(tearing WIN32 MACOSX_BUNDLE tearing.c ${GLAD})
 add_executable(threads WIN32 MACOSX_BUNDLE threads.c ${TINYCTHREAD} ${GLAD})
 add_executable(timeout WIN32 MACOSX_BUNDLE timeout.c ${GLAD})
 add_executable(title WIN32 MACOSX_BUNDLE title.c ${GLAD})

+ 25 - 48
tests/tearing.c

@@ -36,7 +36,6 @@
 #include <math.h>
 
 #include "linmath.h"
-#include "getopt.h"
 
 static const struct
 {
@@ -69,14 +68,6 @@ static int swap_tear;
 static int swap_interval;
 static double frame_rate;
 
-static void usage(void)
-{
-    printf("Usage: tearing [-h] [-f]\n");
-    printf("Options:\n");
-    printf("  -f create full screen window\n");
-    printf("  -h show this help\n");
-}
-
 static void update_window_title(GLFWwindow* window)
 {
     char title[256];
@@ -138,64 +129,50 @@ static void key_callback(GLFWwindow* window, int key, int scancode, int action,
         case GLFW_KEY_ESCAPE:
             glfwSetWindowShouldClose(window, 1);
             break;
+
+        case GLFW_KEY_F11:
+        case GLFW_KEY_ENTER:
+        {
+            static int x, y, width, height;
+
+            if (mods != GLFW_MOD_ALT)
+                return;
+
+            if (glfwGetWindowMonitor(window))
+                glfwSetWindowMonitor(window, NULL, x, y, width, height, 0);
+            else
+            {
+                GLFWmonitor* monitor = glfwGetPrimaryMonitor();
+                const GLFWvidmode* mode = glfwGetVideoMode(monitor);
+                glfwGetWindowPos(window, &x, &y);
+                glfwGetWindowSize(window, &width, &height);
+                glfwSetWindowMonitor(window, monitor,
+                                     0, 0, mode->width, mode->height,
+                                     mode->refreshRate);
+            }
+
+            break;
+        }
     }
 }
 
 int main(int argc, char** argv)
 {
-    int ch, width, height;
     unsigned long frame_count = 0;
     double last_time, current_time;
-    int fullscreen = GLFW_FALSE;
-    GLFWmonitor* monitor = NULL;
     GLFWwindow* window;
     GLuint vertex_buffer, vertex_shader, fragment_shader, program;
     GLint mvp_location, vpos_location;
 
-    while ((ch = getopt(argc, argv, "fh")) != -1)
-    {
-        switch (ch)
-        {
-            case 'h':
-                usage();
-                exit(EXIT_SUCCESS);
-
-            case 'f':
-                fullscreen = GLFW_TRUE;
-                break;
-        }
-    }
-
     glfwSetErrorCallback(error_callback);
 
     if (!glfwInit())
         exit(EXIT_FAILURE);
 
-    if (fullscreen)
-    {
-        const GLFWvidmode* mode;
-
-        monitor = glfwGetPrimaryMonitor();
-        mode = glfwGetVideoMode(monitor);
-
-        glfwWindowHint(GLFW_RED_BITS, mode->redBits);
-        glfwWindowHint(GLFW_GREEN_BITS, mode->greenBits);
-        glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits);
-        glfwWindowHint(GLFW_REFRESH_RATE, mode->refreshRate);
-
-        width = mode->width;
-        height = mode->height;
-    }
-    else
-    {
-        width = 640;
-        height = 480;
-    }
-
     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
 
-    window = glfwCreateWindow(width, height, "", monitor, NULL);
+    window = glfwCreateWindow(640, 480, "Tearing detector", NULL, NULL);
     if (!window)
     {
         glfwTerminate();