ソースを参照

Removed implicit glfwMakeCurrentContext.

Implicitly making the context current makes sense in a
single-window API but less sense in a multi-window one.
Camilla Berglund 13 年 前
コミット
2f095cc9e3

+ 3 - 1
examples/boing.c

@@ -589,11 +589,13 @@ int main( void )
        exit( EXIT_FAILURE );
    }
 
+   glfwMakeContextCurrent(window);
+   glfwSwapInterval( 1 );
+
    glfwGetWindowSize(window, &width, &height);
    reshape(window, width, height);
 
    glfwSetInputMode( window, GLFW_STICKY_KEYS, GL_TRUE );
-   glfwSwapInterval( 1 );
    glfwSetTime( 0.0 );
 
    init();

+ 3 - 1
examples/gears.c

@@ -353,11 +353,13 @@ int main(int argc, char *argv[])
         exit( EXIT_FAILURE );
     }
 
+    glfwMakeContextCurrent(window);
+    glfwSwapInterval( 1 );
+
     glfwGetWindowSize(window, &width, &height);
     reshape(window, width, height);
 
     glfwSetInputMode( window, GLFW_KEY_REPEAT, GL_TRUE );
-    glfwSwapInterval( 1 );
 
     // Parse command-line options
     init(argc, argv);

+ 3 - 1
examples/heightmap.c

@@ -597,10 +597,12 @@ int main(int argc, char** argv)
         free(fragment_shader_src);
         exit(EXIT_FAILURE);
     }
+
+    /* Register events callback */
     glfwSetWindowCloseCallback(window_close_callback);
     glfwSetKeyCallback(key_callback);
-    /* Register events callback */
 
+    glfwMakeContextCurrent(window);
     if (GL_TRUE != init_opengl())
     {
         fprintf(stderr, "ERROR: unable to resolve OpenGL function pointers\n");

+ 4 - 3
examples/splitview.c

@@ -467,12 +467,13 @@ int main(void)
         exit(EXIT_FAILURE);
     }
 
-    glfwGetWindowSize(window, &width, &height);
-    windowSizeFun(window, width, height);
-
     // Enable vsync
+    glfwMakeContextCurrent(window);
     glfwSwapInterval(1);
 
+    glfwGetWindowSize(window, &width, &height);
+    windowSizeFun(window, width, height);
+
     // Enable sticky keys
     glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
 

+ 4 - 3
examples/triangle.c

@@ -30,12 +30,13 @@ int main(void)
         exit(EXIT_FAILURE);
     }
 
-    // Ensure we can capture the escape key being pressed below
-    glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
-
     // Enable vertical sync (on cards that support it)
+    glfwMakeContextCurrent(window);
     glfwSwapInterval(1);
 
+    // Ensure we can capture the escape key being pressed below
+    glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
+
     for (;;)
     {
         double t = glfwGetTime();

+ 3 - 2
examples/wave.c

@@ -413,11 +413,12 @@ int main(int argc, char* argv[])
         exit(EXIT_FAILURE);
     }
 
+    glfwMakeContextCurrent(window);
+    glfwSwapInterval(1);
+
     glfwGetWindowSize(window, &width, &height);
     window_size_callback(window, width, height);
 
-    glfwSwapInterval(1);
-
     glfwSetInputMode(window, GLFW_KEY_REPEAT, GL_TRUE);
 
     // Initialize OpenGL

+ 10 - 0
src/window.c

@@ -209,6 +209,7 @@ GLFWAPI GLFWwindow glfwCreateWindow(int width, int height,
     _GLFWfbconfig fbconfig;
     _GLFWwndconfig wndconfig;
     _GLFWwindow* window;
+    _GLFWwindow* previous;
 
     if (!_glfwInitialized)
     {
@@ -254,6 +255,9 @@ GLFWAPI GLFWwindow glfwCreateWindow(int width, int height,
     if (!_glfwIsValidContextConfig(&wndconfig))
         return GL_FALSE;
 
+    // Save the currently current context so it can be restored later
+    previous = glfwGetCurrentContext();
+
     if (mode != GLFW_WINDOWED && mode != GLFW_FULLSCREEN)
     {
         _glfwSetError(GLFW_INVALID_ENUM,
@@ -303,6 +307,7 @@ GLFWAPI GLFWwindow glfwCreateWindow(int width, int height,
     if (!_glfwPlatformCreateWindow(window, &wndconfig, &fbconfig))
     {
         glfwDestroyWindow(window);
+        glfwMakeContextCurrent(previous);
         return GL_FALSE;
     }
 
@@ -314,6 +319,7 @@ GLFWAPI GLFWwindow glfwCreateWindow(int width, int height,
     if (!_glfwRefreshContextParams())
     {
         glfwDestroyWindow(window);
+        glfwMakeContextCurrent(previous);
         return GL_FALSE;
     }
 
@@ -321,9 +327,13 @@ GLFWAPI GLFWwindow glfwCreateWindow(int width, int height,
     if (!_glfwIsValidContext(&wndconfig))
     {
         glfwDestroyWindow(window);
+        glfwMakeContextCurrent(previous);
         return GL_FALSE;
     }
 
+    // Restore the previously current context (or NULL)
+    glfwMakeContextCurrent(previous);
+
     // The GLFW specification states that fullscreen windows have the cursor
     // captured by default
     if (mode == GLFW_FULLSCREEN)

+ 2 - 0
tests/accuracy.c

@@ -101,6 +101,8 @@ int main(void)
         exit(EXIT_FAILURE);
     }
 
+    glfwMakeContextCurrent(window);
+
     glfwGetWindowSize(window, &width, &height);
     window_size_callback(window, width, height);
 

+ 2 - 0
tests/clipboard.c

@@ -126,7 +126,9 @@ int main(int argc, char** argv)
         exit(EXIT_FAILURE);
     }
 
+    glfwMakeContextCurrent(window);
     glfwSwapInterval(1);
+
     glfwSetKeyCallback(key_callback);
     glfwSetWindowSizeCallback(size_callback);
 

+ 1 - 0
tests/defaults.c

@@ -95,6 +95,7 @@ int main(void)
         exit(EXIT_FAILURE);
     }
 
+    glfwMakeContextCurrent(window);
     glfwGetWindowSize(window, &width, &height);
 
     printf("window size: %ix%i\n", width, height);

+ 1 - 0
tests/events.c

@@ -383,6 +383,7 @@ int main(void)
 
     printf("Window opened\n");
 
+    glfwMakeContextCurrent(window);
     glfwSwapInterval(1);
 
     glfwGetWindowSize(window, &width, &height);

+ 3 - 2
tests/fsaa.c

@@ -107,6 +107,9 @@ int main(int argc, char** argv)
         exit(EXIT_FAILURE);
     }
 
+    glfwMakeContextCurrent(window);
+    glfwSwapInterval(1);
+
     if (!glfwExtensionSupported("GL_ARB_multisample"))
     {
         glfwTerminate();
@@ -115,8 +118,6 @@ int main(int argc, char** argv)
         exit(EXIT_FAILURE);
     }
 
-    glfwSwapInterval(1);
-
     glGetIntegerv(GL_SAMPLES_ARB, &samples);
     if (samples)
         printf("Context reports FSAA is available with %i samples\n", samples);

+ 2 - 0
tests/fsfocus.c

@@ -91,7 +91,9 @@ int main(void)
         exit(EXIT_FAILURE);
     }
 
+    glfwMakeContextCurrent(window);
     glfwSwapInterval(1);
+
     glfwSetInputMode(window, GLFW_CURSOR_MODE, GLFW_CURSOR_NORMAL);
 
     glfwSetWindowFocusCallback(window_focus_callback);

+ 2 - 0
tests/gamma.c

@@ -141,7 +141,9 @@ int main(int argc, char** argv)
 
     set_gamma(1.f);
 
+    glfwMakeContextCurrent(window);
     glfwSwapInterval(1);
+
     glfwSetKeyCallback(key_callback);
     glfwSetWindowSizeCallback(size_callback);
 

+ 2 - 0
tests/glfwinfo.c

@@ -214,6 +214,8 @@ int main(int argc, char** argv)
     if (!window)
         exit(EXIT_FAILURE);
 
+    glfwMakeContextCurrent(window);
+
     // Report GLFW version
 
     glfwGetVersion(&major, &minor, &revision);

+ 2 - 0
tests/iconify.c

@@ -120,7 +120,9 @@ int main(int argc, char** argv)
         exit(EXIT_FAILURE);
     }
 
+    glfwMakeContextCurrent(window);
     glfwSwapInterval(1);
+
     glfwSetKeyCallback(key_callback);
     glfwSetWindowSizeCallback(size_callback);
 

+ 2 - 0
tests/joysticks.c

@@ -196,6 +196,8 @@ int main(void)
     }
 
     glfwSetWindowSizeCallback(window_size_callback);
+
+    glfwMakeContextCurrent(window);
     glfwSwapInterval(1);
 
     while (!glfwGetWindowParam(window, GLFW_CLOSE_REQUESTED))

+ 3 - 1
tests/modes.c

@@ -143,9 +143,11 @@ static void test_modes(void)
             continue;
         }
 
-        glfwSetTime(0.0);
+        glfwMakeContextCurrent(window);
         glfwSwapInterval(1);
 
+        glfwSetTime(0.0);
+
         while (glfwGetTime() < 5.0)
         {
             glClear(GL_COLOR_BUFFER_BIT);

+ 3 - 1
tests/peter.c

@@ -98,13 +98,15 @@ static GLboolean open_window(void)
     if (!window_handle)
         return GL_FALSE;
 
+    glfwMakeContextCurrent(window_handle);
+    glfwSwapInterval(1);
+
     glfwGetCursorPos(window_handle, &cursor_x, &cursor_y);
     printf("Cursor position: %i %i\n", cursor_x, cursor_y);
 
     glfwSetWindowSizeCallback(window_size_callback);
     glfwSetCursorPosCallback(cursor_position_callback);
     glfwSetKeyCallback(key_callback);
-    glfwSwapInterval(1);
 
     return GL_TRUE;
 }

+ 3 - 1
tests/reopen.c

@@ -99,10 +99,12 @@ static GLboolean open_window(int width, int height, int mode)
         return GL_FALSE;
     }
 
+    glfwMakeContextCurrent(window_handle);
+    glfwSwapInterval(1);
+
     glfwSetWindowSizeCallback(window_size_callback);
     glfwSetWindowCloseCallback(window_close_callback);
     glfwSetKeyCallback(key_callback);
-    glfwSwapInterval(1);
 
     printf("Opening %s mode window took %0.3f seconds\n",
            get_mode_name(mode),

+ 3 - 1
tests/sharing.c

@@ -68,9 +68,11 @@ static GLFWwindow open_window(const char* title, GLFWwindow share)
     if (!window)
         return NULL;
 
+    glfwMakeContextCurrent(window);
+    glfwSwapInterval(1);
+
     glfwSetWindowCloseCallback(window_close_callback);
     glfwSetKeyCallback(key_callback);
-    glfwSwapInterval(1);
 
     return window;
 }

+ 1 - 0
tests/tearing.c

@@ -81,6 +81,7 @@ int main(void)
         exit(EXIT_FAILURE);
     }
 
+    glfwMakeContextCurrent(window);
     set_swap_interval(window, swap_interval);
 
     glfwSetWindowSizeCallback(window_size_callback);

+ 1 - 0
tests/title.c

@@ -54,6 +54,7 @@ int main(void)
         exit(EXIT_FAILURE);
     }
 
+    glfwMakeContextCurrent(window);
     glfwSwapInterval(1);
 
     glfwSetWindowSizeCallback(window_size_callback);

+ 3 - 2
tests/windows.c

@@ -64,12 +64,13 @@ int main(void)
             exit(EXIT_FAILURE);
         }
 
-        glfwSetWindowPos(windows[i], 100 + (i & 1) * 300, 100 + (i >> 1) * 300);
-
+        glfwMakeContextCurrent(windows[i]);
         glClearColor((GLclampf) (i & 1),
                      (GLclampf) (i >> 1),
                      i ? 0.0 : 1.0,
                      0.0);
+
+        glfwSetWindowPos(windows[i], 100 + (i & 1) * 300, 100 + (i >> 1) * 300);
     }
 
     while (running)