From 2f095cc9e3ec8f1cf981f7484b1871731cba7b51 Mon Sep 17 00:00:00 2001 From: Camilla Berglund Date: Fri, 10 Aug 2012 15:29:45 +0200 Subject: [PATCH] Removed implicit glfwMakeCurrentContext. Implicitly making the context current makes sense in a single-window API but less sense in a multi-window one. --- examples/boing.c | 4 +++- examples/gears.c | 4 +++- examples/heightmap.c | 4 +++- examples/splitview.c | 7 ++++--- examples/triangle.c | 7 ++++--- examples/wave.c | 5 +++-- src/window.c | 10 ++++++++++ tests/accuracy.c | 2 ++ tests/clipboard.c | 2 ++ tests/defaults.c | 1 + tests/events.c | 1 + tests/fsaa.c | 5 +++-- tests/fsfocus.c | 2 ++ tests/gamma.c | 2 ++ tests/glfwinfo.c | 2 ++ tests/iconify.c | 2 ++ tests/joysticks.c | 2 ++ tests/modes.c | 4 +++- tests/peter.c | 4 +++- tests/reopen.c | 4 +++- tests/sharing.c | 4 +++- tests/tearing.c | 1 + tests/title.c | 1 + tests/windows.c | 5 +++-- 24 files changed, 66 insertions(+), 19 deletions(-) diff --git a/examples/boing.c b/examples/boing.c index c0d3f0ee..3cc09730 100644 --- a/examples/boing.c +++ b/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(); diff --git a/examples/gears.c b/examples/gears.c index ccc06867..cd3cdbb1 100644 --- a/examples/gears.c +++ b/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); diff --git a/examples/heightmap.c b/examples/heightmap.c index ce894f99..fce8b8de 100644 --- a/examples/heightmap.c +++ b/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"); diff --git a/examples/splitview.c b/examples/splitview.c index 2f53f45d..c602d0c4 100644 --- a/examples/splitview.c +++ b/examples/splitview.c @@ -467,12 +467,13 @@ int main(void) exit(EXIT_FAILURE); } + // Enable vsync + glfwMakeContextCurrent(window); + glfwSwapInterval(1); + glfwGetWindowSize(window, &width, &height); windowSizeFun(window, width, height); - // Enable vsync - glfwSwapInterval(1); - // Enable sticky keys glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE); diff --git a/examples/triangle.c b/examples/triangle.c index 9ebfbcac..615483a9 100644 --- a/examples/triangle.c +++ b/examples/triangle.c @@ -30,12 +30,13 @@ int main(void) exit(EXIT_FAILURE); } + // 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); - // Enable vertical sync (on cards that support it) - glfwSwapInterval(1); - for (;;) { double t = glfwGetTime(); diff --git a/examples/wave.c b/examples/wave.c index e0c687d6..668d54bd 100644 --- a/examples/wave.c +++ b/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 diff --git a/src/window.c b/src/window.c index 81b525bd..df592751 100644 --- a/src/window.c +++ b/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) diff --git a/tests/accuracy.c b/tests/accuracy.c index acf9be2f..30235a5e 100644 --- a/tests/accuracy.c +++ b/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); diff --git a/tests/clipboard.c b/tests/clipboard.c index 654de5f9..fcd1c307 100644 --- a/tests/clipboard.c +++ b/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); diff --git a/tests/defaults.c b/tests/defaults.c index fc7b96cc..5e3f3890 100644 --- a/tests/defaults.c +++ b/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); diff --git a/tests/events.c b/tests/events.c index 20051a24..f82b8fc9 100644 --- a/tests/events.c +++ b/tests/events.c @@ -383,6 +383,7 @@ int main(void) printf("Window opened\n"); + glfwMakeContextCurrent(window); glfwSwapInterval(1); glfwGetWindowSize(window, &width, &height); diff --git a/tests/fsaa.c b/tests/fsaa.c index 2a9ccfb5..8fc8b60a 100644 --- a/tests/fsaa.c +++ b/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); diff --git a/tests/fsfocus.c b/tests/fsfocus.c index e718a319..1c46d7af 100644 --- a/tests/fsfocus.c +++ b/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); diff --git a/tests/gamma.c b/tests/gamma.c index b2f1f2b8..7d93ed06 100644 --- a/tests/gamma.c +++ b/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); diff --git a/tests/glfwinfo.c b/tests/glfwinfo.c index 4990ff09..90fd329f 100644 --- a/tests/glfwinfo.c +++ b/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); diff --git a/tests/iconify.c b/tests/iconify.c index 221d558f..d1a505b5 100644 --- a/tests/iconify.c +++ b/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); diff --git a/tests/joysticks.c b/tests/joysticks.c index 374ec82d..488f98ad 100644 --- a/tests/joysticks.c +++ b/tests/joysticks.c @@ -196,6 +196,8 @@ int main(void) } glfwSetWindowSizeCallback(window_size_callback); + + glfwMakeContextCurrent(window); glfwSwapInterval(1); while (!glfwGetWindowParam(window, GLFW_CLOSE_REQUESTED)) diff --git a/tests/modes.c b/tests/modes.c index 2293a399..660f89d5 100644 --- a/tests/modes.c +++ b/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); diff --git a/tests/peter.c b/tests/peter.c index be772e94..ae6e4b7d 100644 --- a/tests/peter.c +++ b/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; } diff --git a/tests/reopen.c b/tests/reopen.c index 545ba280..5d137188 100644 --- a/tests/reopen.c +++ b/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), diff --git a/tests/sharing.c b/tests/sharing.c index 8031a9bb..95f21342 100644 --- a/tests/sharing.c +++ b/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; } diff --git a/tests/tearing.c b/tests/tearing.c index 51e110ac..c2349c88 100644 --- a/tests/tearing.c +++ b/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); diff --git a/tests/title.c b/tests/title.c index 1370b338..c7539033 100644 --- a/tests/title.c +++ b/tests/title.c @@ -54,6 +54,7 @@ int main(void) exit(EXIT_FAILURE); } + glfwMakeContextCurrent(window); glfwSwapInterval(1); glfwSetWindowSizeCallback(window_size_callback); diff --git a/tests/windows.c b/tests/windows.c index ce0609af..7b1a529c 100644 --- a/tests/windows.c +++ b/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)