diff --git a/README.md b/README.md
index 93605ea6..58bea7ff 100644
--- a/README.md
+++ b/README.md
@@ -247,6 +247,8 @@ GLFW.
changes in the set of available monitors
* Added `GLFWwindow` and updated window-related functions and callbacks to take
a window handle
+ * Added `glfwSetWindowShouldClose` and `glfwWindowShouldClose` for setting and
+ retrieving the window close flag
* Added `glfwGetWindowPos` for retrieving the position of a window
* Added `glfwDefaultWindowHints` for resetting all window hints to their
default values
@@ -324,8 +326,7 @@ GLFW.
* Replaced `glfwEnable` and `glfwDisable` with `glfwGetInputMode` and
`glfwSetInputMode`
* Replaced `joystick` test with graphical version
- * Replaced automatic closing of windows with `GLFW_SHOULD_CLOSE` window
- parameter
+ * Replaced automatic closing of windows with the window close flag
* Removed the `GLFW_KEY_REPEAT` input option
* Removed event auto-polling and the `GLFW_AUTO_POLL_EVENTS` window enable
* Removed the Win32 port .def files
diff --git a/docs/quick.dox b/docs/quick.dox
index 41ccb32e..aa5cb7b5 100644
--- a/docs/quick.dox
+++ b/docs/quick.dox
@@ -163,21 +163,32 @@ glfwMakeContextCurrent(window);
@endcode
-@section quick_window_params Retrieving window parameters
+@section quick_window_params Checking the window close flag
-Each window provides a number of parameters that can be queried with @ref
-glfwGetWindowParam. Some are related to the window itself and others to the
-OpenGL context. For example, to find out if the user is attempting to close the
-window, either by pressing the close widget in the title bar or using a key
-combination like Alt+F4, check the @c GLFW_SHOULD_CLOSE parameter.
+Each window has a flag indicating whether the window should be closed. This can
+be checked with @ref glfwWindowShouldClose.
+
+When the user attempts to close the window, either by pressing the close widget
+in the title bar or using a key combination like Alt+F4, this flag is set to 1.
+Note that the window isn't actually closed, so you are expected to
+monitor this flag and either destroy the window or give some kind of feedback to
+the user.
@code
-while (!glfwGetWindowParam(window, GLFW_SHOULD_CLOSE))
+while (!glfwWindowShouldClose(window))
{
// Keep running
}
@endcode
+You can intercept the setting of the close flag by setting a close callback with
+@ref glfwSetWindowCloseCallback. The return value of the close callback becomes
+the new value of the close flag.
+
+You can also set it yourself with @ref glfwSetWindowShouldClose. This can be
+useful if you want to interpret other kinds of input as closing the window, like
+for example pressing the escape key.
+
@section quick_render Rendering with OpenGL
diff --git a/examples/boing.c b/examples/boing.c
index 5f006a8a..4518f1e6 100644
--- a/examples/boing.c
+++ b/examples/boing.c
@@ -43,6 +43,7 @@
void init( void );
void display( void );
void reshape( GLFWwindow* window, int w, int h );
+void key_callback( GLFWwindow* window, int key, int action );
void DrawBoingBall( void );
void BounceBall( double dt );
void DrawBoingBallBand( GLfloat long_lo, GLfloat long_hi );
@@ -244,6 +245,11 @@ void reshape( GLFWwindow* window, int w, int h )
0.0, -1.0, 0.0 ); /* up vector */
}
+void key_callback( GLFWwindow* window, int key, int action )
+{
+ if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
+ glfwSetWindowShouldClose(window, GL_TRUE);
+}
/*****************************************************************************
* Draw the Boing ball.
@@ -584,6 +590,7 @@ int main( void )
}
glfwSetWindowSizeCallback(window, reshape);
+ glfwSetKeyCallback(window, key_callback);
glfwMakeContextCurrent(window);
glfwSwapInterval( 1 );
@@ -591,7 +598,6 @@ int main( void )
glfwGetWindowSize(window, &width, &height);
reshape(window, width, height);
- glfwSetInputMode( window, GLFW_STICKY_KEYS, GL_TRUE );
glfwSetTime( 0.0 );
init();
@@ -612,9 +618,7 @@ int main( void )
glfwPollEvents();
/* Check if we are still running */
- if (glfwGetKey( window, GLFW_KEY_ESCAPE ))
- break;
- if (glfwGetWindowParam(window, GLFW_SHOULD_CLOSE))
+ if (glfwWindowShouldClose(window))
break;
}
diff --git a/examples/gears.c b/examples/gears.c
index a25f86b8..52ed41e2 100644
--- a/examples/gears.c
+++ b/examples/gears.c
@@ -32,10 +32,6 @@
#define M_PI 3.141592654
#endif
-/* The program exits when this is zero.
- */
-static int running = 1;
-
/* If non-zero, the program exits after that many seconds
*/
static int autoexit = 0;
@@ -227,7 +223,7 @@ void key( GLFWwindow* window, int k, int action )
view_rotz += 5.0;
break;
case GLFW_KEY_ESCAPE:
- running = 0;
+ glfwSetWindowShouldClose(window, GL_TRUE);
break;
case GLFW_KEY_UP:
view_rotx += 5.0;
@@ -267,14 +263,6 @@ void reshape( GLFWwindow* window, int width, int height )
}
-/* close callback */
-static int window_close_callback(GLFWwindow* window)
-{
- running = 0;
- return GL_TRUE;
-}
-
-
/* program & OpenGL initialization */
static void init(int argc, char *argv[])
{
@@ -349,7 +337,6 @@ int main(int argc, char *argv[])
}
// Set callback functions
- glfwSetWindowCloseCallback(window, window_close_callback);
glfwSetWindowSizeCallback(window, reshape);
glfwSetKeyCallback(window, key);
@@ -363,7 +350,7 @@ int main(int argc, char *argv[])
init(argc, argv);
// Main loop
- while( running )
+ while( !glfwWindowShouldClose(window) )
{
// Draw gears
draw();
diff --git a/examples/heightmap.c b/examples/heightmap.c
index 352d0e3a..3e141b94 100644
--- a/examples/heightmap.c
+++ b/examples/heightmap.c
@@ -477,27 +477,13 @@ static void update_mesh(void)
* GLFW callback functions
*********************************************************************/
-/* The program runs as long as this is GL_TRUE
- */
-static GLboolean running = GL_TRUE;
-
-/* GLFW Window management functions */
-static int window_close_callback(GLFWwindow* window)
-{
- running = GL_FALSE;
-
- /* Disallow window closing
- * The window will be closed when the main loop terminates */
- return 0;
-}
-
static void key_callback(GLFWwindow* window, int key, int action)
{
switch(key)
{
case GLFW_KEY_ESCAPE:
/* Exit program on Escape */
- running = GL_FALSE;
+ glfwSetWindowShouldClose(window, GL_TRUE);
break;
}
}
@@ -599,7 +585,6 @@ int main(int argc, char** argv)
}
/* Register events callback */
- glfwSetWindowCloseCallback(window, window_close_callback);
glfwSetKeyCallback(window, key_callback);
glfwMakeContextCurrent(window);
@@ -661,7 +646,7 @@ int main(int argc, char** argv)
iter = 0;
dt = last_update_time = glfwGetTime();
- while (running)
+ while (!glfwWindowShouldClose(window))
{
++frame;
/* render the next frame */
diff --git a/examples/simple.c b/examples/simple.c
index a8a105e0..16e88e4b 100644
--- a/examples/simple.c
+++ b/examples/simple.c
@@ -52,7 +52,7 @@ int main(void)
glfwMakeContextCurrent(window);
- while (!glfwGetWindowParam(window, GLFW_SHOULD_CLOSE))
+ while (!glfwWindowShouldClose(window))
{
float ratio;
int width, height;
diff --git a/examples/splitview.c b/examples/splitview.c
index 6c5d4e61..6d2a17fb 100644
--- a/examples/splitview.c
+++ b/examples/splitview.c
@@ -434,6 +434,12 @@ static void mouseButtonFun(GLFWwindow* window, int button, int action)
do_redraw = 1;
}
+static void key_callback(GLFWwindow* window, int key, int action)
+{
+ if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
+ glfwSetWindowShouldClose(window, GL_TRUE);
+}
+
//========================================================================
// main
@@ -450,8 +456,6 @@ int main(void)
exit(EXIT_FAILURE);
}
- glfwWindowHint(GLFW_DEPTH_BITS, 16);
-
// Open OpenGL window
window = glfwCreateWindow(500, 500, "Split view demo", NULL, NULL);
if (!window)
@@ -467,6 +471,7 @@ int main(void)
glfwSetWindowRefreshCallback(window, windowRefreshFun);
glfwSetCursorPosCallback(window, cursorPosFun);
glfwSetMouseButtonCallback(window, mouseButtonFun);
+ glfwSetKeyCallback(window, key_callback);
// Enable vsync
glfwMakeContextCurrent(window);
@@ -475,12 +480,6 @@ int main(void)
glfwGetWindowSize(window, &width, &height);
windowSizeFun(window, width, height);
- // Enable sticky keys
- glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
-
- // Enable mouse cursor (only needed for fullscreen mode)
- glfwSetInputMode(window, GLFW_CURSOR_MODE, GLFW_CURSOR_NORMAL);
-
// Main loop
for (;;)
{
@@ -499,10 +498,8 @@ int main(void)
// Wait for new events
glfwWaitEvents();
- // Check if the ESC key was pressed or the window should be closed
- if (glfwGetKey(window, GLFW_KEY_ESCAPE))
- break;
- if (glfwGetWindowParam(window, GLFW_SHOULD_CLOSE))
+ // Check if the window should be closed
+ if (glfwWindowShouldClose(window))
break;
}
diff --git a/examples/wave.c b/examples/wave.c
index 474caf1d..067e99a0 100644
--- a/examples/wave.c
+++ b/examples/wave.c
@@ -28,7 +28,6 @@
GLfloat alpha = 210.f, beta = -70.f;
GLfloat zoom = 2.f;
-GLboolean running = GL_TRUE;
GLboolean locked = GL_FALSE;
int cursorX;
@@ -279,7 +278,7 @@ void key_callback(GLFWwindow* window, int key, int action)
switch (key)
{
case GLFW_KEY_ESCAPE:
- running = 0;
+ glfwSetWindowShouldClose(window, GL_TRUE);
break;
case GLFW_KEY_SPACE:
init_grid();
@@ -382,17 +381,6 @@ void window_size_callback(GLFWwindow* window, int width, int height)
}
-//========================================================================
-// Callback function for window close events
-//========================================================================
-
-static int window_close_callback(GLFWwindow* window)
-{
- running = GL_FALSE;
- return GL_TRUE;
-}
-
-
//========================================================================
// main
//========================================================================
@@ -416,7 +404,6 @@ int main(int argc, char* argv[])
}
glfwSetKeyCallback(window, key_callback);
- glfwSetWindowCloseCallback(window, window_close_callback);
glfwSetWindowSizeCallback(window, window_size_callback);
glfwSetMouseButtonCallback(window, mouse_button_callback);
glfwSetCursorPosCallback(window, cursor_position_callback);
@@ -439,7 +426,7 @@ int main(int argc, char* argv[])
// Initialize timer
t_old = glfwGetTime() - 0.01;
- while (running)
+ while (!glfwWindowShouldClose(window))
{
t = glfwGetTime();
dt_total = t - t_old;
diff --git a/include/GL/glfw3.h b/include/GL/glfw3.h
index c04d99f7..6f2656da 100644
--- a/include/GL/glfw3.h
+++ b/include/GL/glfw3.h
@@ -483,7 +483,6 @@ extern "C" {
#define GLFW_FOCUSED 0x00020001
#define GLFW_ICONIFIED 0x00020002
-#define GLFW_SHOULD_CLOSE 0x00020003
#define GLFW_RESIZABLE 0x00022007
#define GLFW_VISIBLE 0x00022008
@@ -595,8 +594,8 @@ typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int);
* @return One of @c GL_TRUE or @c GL_FALSE.
* @ingroup window
*
- * The return value of the close callback becomes the new value of the @c
- * GLFW_SHOULD_CLOSE window parameter.
+ * The return value of the close callback becomes the new value returned by
+ * @ref glfwWindowShouldClose.
*
* @sa glfwSetWindowCloseCallback
*/
@@ -1122,6 +1121,23 @@ GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, G
*/
GLFWAPI void glfwDestroyWindow(GLFWwindow* window);
+/*! @brief Checks whether the specified window has been requested to close.
+ * @param[in] window The window to query.
+ * @return @c GL_TRUE if the window should close, or @c GL_FALSE otherwise.
+ * @ingroup window
+ */
+GLFWAPI int glfwWindowShouldClose(GLFWwindow* window);
+
+/*! @brief Sets whether the specified window should close.
+ * @param[in] window The window whose value to change.
+ * @param[in] value The new value.
+ * @ingroup window
+ *
+ * @note Calling this from the close callback will have no effect, as whatever
+ * value you set will be overwritten by the return value of the close callback.
+ */
+GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value);
+
/*! @brief Sets the title of the specified window.
* @param[in] window The window whose title to change.
* @param[in] title The UTF-8 encoded window title.
@@ -1281,9 +1297,6 @@ GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window);
* The @c GLFW_RESIZABLE parameter indicates whether the window is resizable
* by the user.
*
- * The @c GLFW_SHOULD_CLOSE parameter indicates whether the window has been
- * requested by the user to close.
- *
* @par Context parameters
*
* The @c GLFW_CLIENT_API parameter indicates the client API provided by the
@@ -1357,9 +1370,8 @@ GLFWAPI void glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwindowsizefun cbf
* clicks the window's close widget. Calling @ref glfwDestroyWindow does not
* cause this callback to be called.
*
- * The return value of the close callback becomes the new value of the @c
- * GLFW_SHOULD_CLOSE window parameter, which you can query with @ref
- * glfwGetWindowParam.
+ * The return value of the close callback becomes the new value returned by
+ * @ref glfwWindowShouldClose.
*
* @remarks Mac OS X: Selecting Quit from the application menu will
* trigger the close callback for all windows.
diff --git a/src/window.c b/src/window.c
index 3a6aa299..4ca174ad 100644
--- a/src/window.c
+++ b/src/window.c
@@ -406,6 +406,20 @@ GLFWAPI void glfwDestroyWindow(GLFWwindow* handle)
free(window);
}
+GLFWAPI int glfwWindowShouldClose(GLFWwindow* handle)
+{
+ _GLFWwindow* window = (_GLFWwindow*) handle;
+ _GLFW_REQUIRE_INIT_OR_RETURN(0);
+ return window->closed;
+}
+
+GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* handle, int value)
+{
+ _GLFWwindow* window = (_GLFWwindow*) handle;
+ _GLFW_REQUIRE_INIT();
+ window->closed = value;
+}
+
GLFWAPI void glfwSetWindowTitle(GLFWwindow* handle, const char* title)
{
_GLFWwindow* window = (_GLFWwindow*) handle;
@@ -524,8 +538,6 @@ GLFWAPI int glfwGetWindowParam(GLFWwindow* handle, int param)
return window == _glfw.focusedWindow;
case GLFW_ICONIFIED:
return window->iconified;
- case GLFW_SHOULD_CLOSE:
- return window->closed;
case GLFW_RESIZABLE:
return window->resizable;
case GLFW_VISIBLE:
diff --git a/tests/accuracy.c b/tests/accuracy.c
index c6636d39..755d5dd6 100644
--- a/tests/accuracy.c
+++ b/tests/accuracy.c
@@ -108,7 +108,7 @@ int main(void)
set_swap_interval(window, swap_interval);
- while (!glfwGetWindowParam(window, GLFW_SHOULD_CLOSE))
+ while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT);
diff --git a/tests/clipboard.c b/tests/clipboard.c
index 69c72b82..12903d2c 100644
--- a/tests/clipboard.c
+++ b/tests/clipboard.c
@@ -34,8 +34,6 @@
#include "getopt.h"
-static GLboolean closed = GL_FALSE;
-
static void usage(void)
{
printf("Usage: clipboard [-h]\n");
@@ -52,12 +50,6 @@ static void error_callback(int error, const char* description)
fprintf(stderr, "Error: %s\n", description);
}
-static int window_close_callback(GLFWwindow* window)
-{
- closed = GL_TRUE;
- return GL_FALSE;
-}
-
static void key_callback(GLFWwindow* window, int key, int action)
{
if (action != GLFW_PRESS)
@@ -66,7 +58,7 @@ static void key_callback(GLFWwindow* window, int key, int action)
switch (key)
{
case GLFW_KEY_ESCAPE:
- closed = GL_TRUE;
+ glfwSetWindowShouldClose(window, GL_TRUE);
break;
case GLFW_KEY_V:
@@ -139,7 +131,6 @@ int main(int argc, char** argv)
glfwSetKeyCallback(window, key_callback);
glfwSetWindowSizeCallback(window, window_size_callback);
- glfwSetWindowCloseCallback(window, window_close_callback);
glMatrixMode(GL_PROJECTION);
glOrtho(-1.f, 1.f, -1.f, 1.f, -1.f, 1.f);
@@ -147,7 +138,7 @@ int main(int argc, char** argv)
glClearColor(0.5f, 0.5f, 0.5f, 0);
- while (!closed)
+ while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT);
diff --git a/tests/events.c b/tests/events.c
index 6058c991..a899ef33 100644
--- a/tests/events.c
+++ b/tests/events.c
@@ -416,7 +416,7 @@ int main(void)
printf("Main loop starting\n");
- while (!glfwGetWindowParam(window, GLFW_SHOULD_CLOSE))
+ while (!glfwWindowShouldClose(window))
glfwWaitEvents();
glfwTerminate();
diff --git a/tests/fsaa.c b/tests/fsaa.c
index 57fde737..530b6c37 100644
--- a/tests/fsaa.c
+++ b/tests/fsaa.c
@@ -128,7 +128,7 @@ int main(int argc, char** argv)
gluOrtho2D(0.f, 1.f, 0.f, 0.5f);
glMatrixMode(GL_MODELVIEW);
- while (!glfwGetWindowParam(window, GLFW_SHOULD_CLOSE))
+ while (!glfwWindowShouldClose(window))
{
GLfloat time = (GLfloat) glfwGetTime();
diff --git a/tests/fsfocus.c b/tests/fsfocus.c
index e2522cc4..9eeb5a4c 100644
--- a/tests/fsfocus.c
+++ b/tests/fsfocus.c
@@ -33,8 +33,6 @@
#include
#include
-static GLboolean running = GL_TRUE;
-
static void error_callback(int error, const char* description)
{
fprintf(stderr, "Error: %s\n", description);
@@ -57,7 +55,7 @@ static void window_key_callback(GLFWwindow* window, int key, int action)
case GLFW_KEY_ESCAPE:
{
printf("%0.3f: User pressed Escape\n", glfwGetTime());
- running = GL_FALSE;
+ glfwSetWindowShouldClose(window, GL_TRUE);
break;
}
@@ -70,13 +68,6 @@ static void window_key_callback(GLFWwindow* window, int key, int action)
}
}
-static int window_close_callback(GLFWwindow* window)
-{
- printf("%0.3f: User closed window\n", glfwGetTime());
- running = GL_FALSE;
- return GL_TRUE;
-}
-
int main(void)
{
GLFWwindow* window;
@@ -100,9 +91,8 @@ int main(void)
glfwSetWindowFocusCallback(window, window_focus_callback);
glfwSetKeyCallback(window, window_key_callback);
- glfwSetWindowCloseCallback(window, window_close_callback);
- while (running)
+ while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
diff --git a/tests/gamma.c b/tests/gamma.c
index 962bfefc..582b8594 100644
--- a/tests/gamma.c
+++ b/tests/gamma.c
@@ -37,7 +37,6 @@
#define STEP_SIZE 0.1f
-static GLboolean closed = GL_FALSE;
static GLfloat gamma_value = 1.0f;
static void usage(void)
@@ -61,12 +60,6 @@ static void error_callback(int error, const char* description)
fprintf(stderr, "Error: %s\n", description);
}
-static int window_close_callback(GLFWwindow* window)
-{
- closed = GL_TRUE;
- return GL_FALSE;
-}
-
static void key_callback(GLFWwindow* window, int key, int action)
{
if (action != GLFW_PRESS)
@@ -76,7 +69,7 @@ static void key_callback(GLFWwindow* window, int key, int action)
{
case GLFW_KEY_ESCAPE:
{
- closed = GL_TRUE;
+ glfwSetWindowShouldClose(window, GL_TRUE);
break;
}
@@ -157,7 +150,6 @@ int main(int argc, char** argv)
glfwSwapInterval(1);
glfwSetKeyCallback(window, key_callback);
- glfwSetWindowCloseCallback(window, window_close_callback);
glfwSetWindowSizeCallback(window, size_callback);
glMatrixMode(GL_PROJECTION);
@@ -166,7 +158,7 @@ int main(int argc, char** argv)
glClearColor(0.5f, 0.5f, 0.5f, 0);
- while (!closed)
+ while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT);
diff --git a/tests/iconify.c b/tests/iconify.c
index 796339f2..907ae13b 100644
--- a/tests/iconify.c
+++ b/tests/iconify.c
@@ -35,8 +35,6 @@
#include "getopt.h"
-static GLboolean closed = GL_FALSE;
-
static void usage(void)
{
printf("Usage: iconify [-h] [-f]\n");
@@ -47,12 +45,6 @@ static void error_callback(int error, const char* description)
fprintf(stderr, "Error: %s\n", description);
}
-static int window_close_callback(GLFWwindow* window)
-{
- closed = GL_TRUE;
- return GL_FALSE;
-}
-
static void key_callback(GLFWwindow* window, int key, int action)
{
printf("%0.2f Key %s\n",
@@ -68,7 +60,7 @@ static void key_callback(GLFWwindow* window, int key, int action)
glfwIconifyWindow(window);
break;
case GLFW_KEY_ESCAPE:
- closed = GL_TRUE;
+ glfwSetWindowShouldClose(window, GL_TRUE);
break;
}
}
@@ -147,7 +139,6 @@ int main(int argc, char** argv)
glfwSetKeyCallback(window, key_callback);
glfwSetWindowSizeCallback(window, window_size_callback);
- glfwSetWindowCloseCallback(window, window_close_callback);
glfwSetWindowFocusCallback(window, window_focus_callback);
glfwSetWindowIconifyCallback(window, window_iconify_callback);
@@ -157,7 +148,7 @@ int main(int argc, char** argv)
glEnable(GL_SCISSOR_TEST);
- while (!closed)
+ while (!glfwWindowShouldClose(window))
{
glfwGetWindowSize(window, &width, &height);
diff --git a/tests/joysticks.c b/tests/joysticks.c
index 90dbe588..67845586 100644
--- a/tests/joysticks.c
+++ b/tests/joysticks.c
@@ -211,7 +211,7 @@ int main(void)
glfwMakeContextCurrent(window);
glfwSwapInterval(1);
- while (!glfwGetWindowParam(window, GLFW_SHOULD_CLOSE))
+ while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT);
diff --git a/tests/modes.c b/tests/modes.c
index d43afadf..4e083d02 100644
--- a/tests/modes.c
+++ b/tests/modes.c
@@ -35,8 +35,6 @@
#include "getopt.h"
-static GLFWwindow* window_handle = NULL;
-
enum Mode
{
LIST_MODE,
@@ -75,19 +73,10 @@ static void window_size_callback(GLFWwindow* window, int width, int height)
glViewport(0, 0, width, height);
}
-static int window_close_callback(GLFWwindow* window)
-{
- window_handle = NULL;
- return GL_TRUE;
-}
-
static void key_callback(GLFWwindow* window, int key, int action)
{
if (key == GLFW_KEY_ESCAPE)
- {
- glfwDestroyWindow(window);
- window_handle = NULL;
- }
+ glfwSetWindowShouldClose(window, GL_TRUE);
}
static void list_modes(GLFWmonitor* monitor)
@@ -124,6 +113,7 @@ static void list_modes(GLFWmonitor* monitor)
static void test_modes(GLFWmonitor* monitor)
{
int i, count;
+ GLFWwindow* window;
const GLFWvidmode* modes = glfwGetVideoModes(monitor, &count);
for (i = 0; i < count; i++)
@@ -140,11 +130,11 @@ static void test_modes(GLFWmonitor* monitor)
glfwGetMonitorName(monitor),
format_mode(mode));
- window_handle = glfwCreateWindow(mode->width, mode->height,
- "Video Mode Test",
- glfwGetPrimaryMonitor(),
- NULL);
- if (!window_handle)
+ window = glfwCreateWindow(mode->width, mode->height,
+ "Video Mode Test",
+ glfwGetPrimaryMonitor(),
+ NULL);
+ if (!window)
{
printf("Failed to enter mode %u: %s\n",
(unsigned int) i,
@@ -152,11 +142,10 @@ static void test_modes(GLFWmonitor* monitor)
continue;
}
- glfwSetWindowSizeCallback(window_handle, window_size_callback);
- glfwSetWindowCloseCallback(window_handle, window_close_callback);
- glfwSetKeyCallback(window_handle, key_callback);
+ glfwSetWindowSizeCallback(window, window_size_callback);
+ glfwSetKeyCallback(window, key_callback);
- glfwMakeContextCurrent(window_handle);
+ glfwMakeContextCurrent(window);
glfwSwapInterval(1);
glfwSetTime(0.0);
@@ -164,10 +153,10 @@ static void test_modes(GLFWmonitor* monitor)
while (glfwGetTime() < 5.0)
{
glClear(GL_COLOR_BUFFER_BIT);
- glfwSwapBuffers(window_handle);
+ glfwSwapBuffers(window);
glfwPollEvents();
- if (!window_handle)
+ if (glfwWindowShouldClose(window))
{
printf("User terminated program\n");
@@ -180,7 +169,7 @@ static void test_modes(GLFWmonitor* monitor)
glGetIntegerv(GL_GREEN_BITS, ¤t.greenBits);
glGetIntegerv(GL_BLUE_BITS, ¤t.blueBits);
- glfwGetWindowSize(window_handle, ¤t.width, ¤t.height);
+ glfwGetWindowSize(window, ¤t.width, ¤t.height);
if (current.redBits != mode->redBits ||
current.greenBits != mode->greenBits ||
@@ -200,8 +189,9 @@ static void test_modes(GLFWmonitor* monitor)
printf("Closing window\n");
- glfwDestroyWindow(window_handle);
- window_handle = NULL;
+ glfwDestroyWindow(window);
+ window = NULL;
+
glfwPollEvents();
}
}
diff --git a/tests/peter.c b/tests/peter.c
index bb773815..110cdb8c 100644
--- a/tests/peter.c
+++ b/tests/peter.c
@@ -36,12 +36,9 @@
#include
static GLboolean reopen = GL_FALSE;
-static GLFWwindow* window_handle = NULL;
static int cursor_x;
static int cursor_y;
-static GLboolean open_window(void);
-
static void toggle_cursor(GLFWwindow* window)
{
if (glfwGetInputMode(window, GLFW_CURSOR_MODE) == GLFW_CURSOR_CAPTURED)
@@ -95,33 +92,36 @@ static void window_size_callback(GLFWwindow* window, int width, int height)
glViewport(0, 0, width, height);
}
-static GLboolean open_window(void)
+static GLFWwindow* open_window(void)
{
- window_handle = glfwCreateWindow(640, 480, "Peter Detector", NULL, NULL);
- if (!window_handle)
- return GL_FALSE;
+ GLFWwindow* window = glfwCreateWindow(640, 480, "Peter Detector", NULL, NULL);
+ if (!window)
+ return NULL;
- glfwMakeContextCurrent(window_handle);
+ glfwMakeContextCurrent(window);
glfwSwapInterval(1);
- glfwGetCursorPos(window_handle, &cursor_x, &cursor_y);
+ glfwGetCursorPos(window, &cursor_x, &cursor_y);
printf("Cursor position: %i %i\n", cursor_x, cursor_y);
- glfwSetWindowSizeCallback(window_handle, window_size_callback);
- glfwSetCursorPosCallback(window_handle, cursor_position_callback);
- glfwSetKeyCallback(window_handle, key_callback);
+ glfwSetWindowSizeCallback(window, window_size_callback);
+ glfwSetCursorPosCallback(window, cursor_position_callback);
+ glfwSetKeyCallback(window, key_callback);
- return GL_TRUE;
+ return window;
}
int main(void)
{
+ GLFWwindow* window;
+
glfwSetErrorCallback(error_callback);
if (!glfwInit())
exit(EXIT_FAILURE);
- if (!open_window())
+ window = open_window();
+ if (!window)
{
glfwTerminate();
exit(EXIT_FAILURE);
@@ -129,17 +129,18 @@ int main(void)
glClearColor(0.f, 0.f, 0.f, 0.f);
- while (!glfwGetWindowParam(window_handle, GLFW_SHOULD_CLOSE))
+ while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT);
- glfwSwapBuffers(window_handle);
+ glfwSwapBuffers(window);
glfwWaitEvents();
if (reopen)
{
- glfwDestroyWindow(window_handle);
- if (!open_window())
+ glfwDestroyWindow(window);
+ window = open_window();
+ if (!window)
{
glfwTerminate();
exit(EXIT_FAILURE);
diff --git a/tests/reopen.c b/tests/reopen.c
index 61356255..7a2e3814 100644
--- a/tests/reopen.c
+++ b/tests/reopen.c
@@ -38,9 +38,6 @@
#include
#include
-static GLFWwindow* window_handle = NULL;
-static GLboolean closed = GL_FALSE;
-
static void error_callback(int error, const char* description)
{
fprintf(stderr, "Error: %s\n", description);
@@ -54,8 +51,7 @@ static void window_size_callback(GLFWwindow* window, int width, int height)
static int window_close_callback(GLFWwindow* window)
{
printf("Close callback triggered\n");
- closed = GL_TRUE;
- return 0;
+ return GL_TRUE;
}
static void key_callback(GLFWwindow* window, int key, int action)
@@ -67,48 +63,47 @@ static void key_callback(GLFWwindow* window, int key, int action)
{
case GLFW_KEY_Q:
case GLFW_KEY_ESCAPE:
- closed = GL_TRUE;
+ glfwSetWindowShouldClose(window, GL_TRUE);
break;
}
}
-static GLboolean open_window(int width, int height, GLFWmonitor* monitor)
+static GLFWwindow* open_window(int width, int height, GLFWmonitor* monitor)
{
double base;
+ GLFWwindow* window;
base = glfwGetTime();
- window_handle = glfwCreateWindow(width, height, "Window Re-opener", monitor, NULL);
- if (!window_handle)
- return GL_FALSE;
+ window = glfwCreateWindow(width, height, "Window Re-opener", monitor, NULL);
+ if (!window)
+ return NULL;
- glfwMakeContextCurrent(window_handle);
+ glfwMakeContextCurrent(window);
glfwSwapInterval(1);
- glfwSetWindowSizeCallback(window_handle, window_size_callback);
- glfwSetWindowCloseCallback(window_handle, window_close_callback);
- glfwSetKeyCallback(window_handle, key_callback);
+ glfwSetWindowSizeCallback(window, window_size_callback);
+ glfwSetWindowCloseCallback(window, window_close_callback);
+ glfwSetKeyCallback(window, key_callback);
printf("Opening %s mode window took %0.3f seconds\n",
monitor ? "fullscreen" : "windowed",
glfwGetTime() - base);
- return GL_TRUE;
+ return window;
}
-static void close_window(void)
+static void close_window(GLFWwindow* window)
{
double base = glfwGetTime();
-
- glfwDestroyWindow(window_handle);
- window_handle = NULL;
-
+ glfwDestroyWindow(window);
printf("Closing window took %0.3f seconds\n", glfwGetTime() - base);
}
int main(int argc, char** argv)
{
int count = 0;
+ GLFWwindow* window;
glfwSetErrorCallback(error_callback);
@@ -126,7 +121,8 @@ int main(int argc, char** argv)
monitor = monitors[rand() % monitorCount];
}
- if (!open_window(640, 480, monitor))
+ window = open_window(640, 480, monitor);
+ if (!window)
{
glfwTerminate();
exit(EXIT_FAILURE);
@@ -147,12 +143,12 @@ int main(int argc, char** argv)
glRectf(-0.5f, -0.5f, 1.f, 1.f);
glPopMatrix();
- glfwSwapBuffers(window_handle);
+ glfwSwapBuffers(window);
glfwPollEvents();
- if (closed)
+ if (glfwWindowShouldClose(window))
{
- close_window();
+ close_window(window);
printf("User closed window\n");
glfwTerminate();
@@ -161,7 +157,7 @@ int main(int argc, char** argv)
}
printf("Closing window\n");
- close_window();
+ close_window(window);
count++;
}
diff --git a/tests/sharing.c b/tests/sharing.c
index 28ec68ec..656ce093 100644
--- a/tests/sharing.c
+++ b/tests/sharing.c
@@ -38,7 +38,6 @@
#define OFFSET 50
static GLFWwindow* windows[2];
-static GLboolean closed = GL_FALSE;
static void error_callback(int error, const char* description)
{
@@ -48,13 +47,7 @@ static void error_callback(int error, const char* description)
static void key_callback(GLFWwindow* window, int key, int action)
{
if (action == GLFW_PRESS && key == GLFW_KEY_ESCAPE)
- closed = GL_TRUE;
-}
-
-static int window_close_callback(GLFWwindow* window)
-{
- closed = GL_TRUE;
- return GL_FALSE;
+ glfwSetWindowShouldClose(window, GL_TRUE);
}
static GLFWwindow* open_window(const char* title, GLFWwindow* share, int posX, int posY)
@@ -71,7 +64,6 @@ static GLFWwindow* open_window(const char* title, GLFWwindow* share, int posX, i
glfwSetWindowPos(window, posX, posY);
glfwShowWindow(window);
- glfwSetWindowCloseCallback(window, window_close_callback);
glfwSetKeyCallback(window, key_callback);
return window;
@@ -172,7 +164,8 @@ int main(int argc, char** argv)
glfwMakeContextCurrent(windows[0]);
- while (!closed)
+ while (!glfwWindowShouldClose(windows[0]) &&
+ !glfwWindowShouldClose(windows[1]))
{
glfwMakeContextCurrent(windows[0]);
draw_quad(texture);
diff --git a/tests/tearing.c b/tests/tearing.c
index b67bb34c..4e375950 100644
--- a/tests/tearing.c
+++ b/tests/tearing.c
@@ -91,7 +91,7 @@ int main(void)
glOrtho(-1.f, 1.f, -1.f, 1.f, 1.f, -1.f);
glMatrixMode(GL_MODELVIEW);
- while (!glfwGetWindowParam(window, GLFW_SHOULD_CLOSE))
+ while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT);
diff --git a/tests/threads.c b/tests/threads.c
index 51595006..6de40284 100644
--- a/tests/threads.c
+++ b/tests/threads.c
@@ -124,7 +124,7 @@ int main(void)
for (i = 0; i < count; i++)
{
- if (glfwGetWindowParam(threads[i].window, GLFW_SHOULD_CLOSE))
+ if (glfwWindowShouldClose(threads[i].window))
running = GL_FALSE;
}
}
diff --git a/tests/title.c b/tests/title.c
index b596c229..53d9fb6f 100644
--- a/tests/title.c
+++ b/tests/title.c
@@ -63,7 +63,7 @@ int main(void)
glfwSetWindowSizeCallback(window, window_size_callback);
- while (!glfwGetWindowParam(window, GLFW_SHOULD_CLOSE))
+ while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
diff --git a/tests/windows.c b/tests/windows.c
index 915fbec0..8ca5cd51 100644
--- a/tests/windows.c
+++ b/tests/windows.c
@@ -85,7 +85,7 @@ int main(void)
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(windows[i]);
- if (glfwGetWindowParam(windows[i], GLFW_SHOULD_CLOSE))
+ if (glfwWindowShouldClose(windows[i]))
running = GL_FALSE;
}