diff --git a/examples/boing.c b/examples/boing.c
index 5a1993ff..f9771122 100644
--- a/examples/boing.c
+++ b/examples/boing.c
@@ -572,17 +572,13 @@ int main( void )
/* Init GLFW */
if( !glfwInit() )
- {
- fprintf( stderr, "Failed to initialize GLFW\n" );
exit( EXIT_FAILURE );
- }
glfwWindowHint(GLFW_DEPTH_BITS, 16);
window = glfwCreateWindow( 400, 400, GLFW_WINDOWED, "Boing (classic Amiga demo)", NULL );
if (!window)
{
- fprintf( stderr, "Failed to open GLFW window\n" );
glfwTerminate();
exit( EXIT_FAILURE );
}
diff --git a/examples/triangle.c b/examples/triangle.c
index 3a1cef94..13ef0a98 100644
--- a/examples/triangle.c
+++ b/examples/triangle.c
@@ -10,24 +10,26 @@
#define GLFW_INCLUDE_GLU
#include
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
int main(void)
{
int width, height, x;
GLFWwindow window;
+ glfwSetErrorCallback(error_callback);
+
// Initialise GLFW
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW\n");
exit(EXIT_FAILURE);
- }
// Open a window and create its OpenGL context
window = glfwCreateWindow(640, 480, GLFW_WINDOWED, "Spinning Triangle", NULL);
if (!window)
{
- fprintf(stderr, "Failed to open GLFW window\n");
-
glfwTerminate();
exit(EXIT_FAILURE);
}
diff --git a/examples/wave.c b/examples/wave.c
index 7b4b4c32..28065d30 100644
--- a/examples/wave.c
+++ b/examples/wave.c
@@ -257,6 +257,16 @@ void calc_grid(void)
}
+//========================================================================
+// Print errors
+//========================================================================
+
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
+
//========================================================================
// Handle key strokes
//========================================================================
@@ -393,16 +403,15 @@ int main(int argc, char* argv[])
double t, dt_total, t_old;
int width, height;
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "GLFW initialization failed\n");
exit(EXIT_FAILURE);
- }
window = glfwCreateWindow(640, 480, GLFW_WINDOWED, "Wave Simulation", NULL);
if (!window)
{
- fprintf(stderr, "Could not open window\n");
+ glfwTerminate();
exit(EXIT_FAILURE);
}
diff --git a/include/GL/glfw3.h b/include/GL/glfw3.h
index bd968a6c..46db151f 100644
--- a/include/GL/glfw3.h
+++ b/include/GL/glfw3.h
@@ -951,25 +951,6 @@ GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev);
*/
GLFWAPI const char* glfwGetVersionString(void);
-/*! @brief Retrieves the latest error.
- * @return The latest @link errors error code @endlink.
- * @ingroup error
- *
- * @remarks This function may be called before @ref glfwInit.
- */
-GLFWAPI int glfwGetError(void);
-
-/*! @brief Retrieves a generic, human readable description of the specified error.
- * @param[in] error The @link errors error code @endlink to be described.
- * @return A UTF-8 encoded string describing the error.
- * @ingroup error
- *
- * @remarks This function may be called before @ref glfwInit.
- *
- * @remarks This function may be called from secondary threads.
- */
-GLFWAPI const char* glfwErrorString(int error);
-
/*! @brief Sets the error callback.
* @param[in] cbfun The new callback, or @c NULL to remove the currently set
* callback.
diff --git a/readme.html b/readme.html
index 8e25c743..d5e9d922 100644
--- a/readme.html
+++ b/readme.html
@@ -270,8 +270,7 @@ version of GLFW.
Added GLFWwindow
window handle type and updated window-related functions and callbacks to take a window handle
Added glfwDefaultWindowHints
function for resetting all window hints to their default values
Added glfwMakeContextCurrent
function for making the context of the specified window current
- Added glfwGetError
and glfwErrorString
error reporting functions and a number of error tokens
- Added glfwSetErrorCallback
function and GLFWerrorfun
type for receiving more specific and/or nested errors
+ Added glfwSetErrorCallback
function and GLFWerrorfun
type for receiving error descriptions
Added glfwSetWindowUserPointer
and glfwGetWindowUserPointer
functions for per-window user pointers
Added glfwGetVersionString
function for determining which code paths were enabled at compile time
Added glfwSetWindowPosCallback
function and GLFWwindowposfun
type for reciving window position events
diff --git a/src/init.c b/src/init.c
index 521674ab..dbdbc48d 100644
--- a/src/init.c
+++ b/src/init.c
@@ -50,15 +50,6 @@ GLboolean _glfwInitialized = GL_FALSE;
_GLFWlibrary _glfwLibrary;
-//------------------------------------------------------------------------
-// The current GLFW error code
-// This is outside of _glfwLibrary so it can be initialized and usable
-// before glfwInit is called, which lets that function report errors
-// TODO: Make this thread-local
-//------------------------------------------------------------------------
-static int _glfwError = GLFW_NO_ERROR;
-
-
//------------------------------------------------------------------------
// The current error callback
// This is outside of _glfwLibrary so it can be initialized and usable
@@ -67,6 +58,40 @@ static int _glfwError = GLFW_NO_ERROR;
static GLFWerrorfun _glfwErrorCallback = NULL;
+//========================================================================
+// Returns a generic string representation of the specified error
+//========================================================================
+
+static const char* getErrorString(int error)
+{
+ switch (error)
+ {
+ case GLFW_NO_ERROR:
+ return "No error";
+ case GLFW_NOT_INITIALIZED:
+ return "The GLFW library is not initialized";
+ case GLFW_NO_CURRENT_CONTEXT:
+ return "There is no current context";
+ case GLFW_INVALID_ENUM:
+ return "Invalid argument for enum parameter";
+ case GLFW_INVALID_VALUE:
+ return "Invalid value for parameter";
+ case GLFW_OUT_OF_MEMORY:
+ return "Out of memory";
+ case GLFW_API_UNAVAILABLE:
+ return "The requested client API is unavailable";
+ case GLFW_VERSION_UNAVAILABLE:
+ return "The requested client API version is unavailable";
+ case GLFW_PLATFORM_ERROR:
+ return "A platform-specific error occurred";
+ case GLFW_FORMAT_UNAVAILABLE:
+ return "The requested format is unavailable";
+ }
+
+ return "ERROR: UNKNOWN ERROR TOKEN PASSED TO glfwErrorString";
+}
+
+
//////////////////////////////////////////////////////////////////////////
////// GLFW internal API //////
//////////////////////////////////////////////////////////////////////////
@@ -97,12 +122,10 @@ void _glfwSetError(int error, const char* format, ...)
description = buffer;
}
else
- description = glfwErrorString(error);
+ description = getErrorString(error);
_glfwErrorCallback(error, description);
}
- else
- _glfwError = error;
}
@@ -187,54 +210,6 @@ GLFWAPI const char* glfwGetVersionString(void)
}
-//========================================================================
-// Returns the current error value
-// This function may be called without GLFW having been initialized
-//========================================================================
-
-GLFWAPI int glfwGetError(void)
-{
- int error = _glfwError;
- _glfwError = GLFW_NO_ERROR;
- return error;
-}
-
-
-//========================================================================
-// Returns a string representation of the specified error value
-// This function may be called without GLFW having been initialized
-//========================================================================
-
-GLFWAPI const char* glfwErrorString(int error)
-{
- switch (error)
- {
- case GLFW_NO_ERROR:
- return "No error";
- case GLFW_NOT_INITIALIZED:
- return "The GLFW library is not initialized";
- case GLFW_NO_CURRENT_CONTEXT:
- return "There is no current context";
- case GLFW_INVALID_ENUM:
- return "Invalid argument for enum parameter";
- case GLFW_INVALID_VALUE:
- return "Invalid value for parameter";
- case GLFW_OUT_OF_MEMORY:
- return "Out of memory";
- case GLFW_API_UNAVAILABLE:
- return "The requested client API is unavailable";
- case GLFW_VERSION_UNAVAILABLE:
- return "The requested client API version is unavailable";
- case GLFW_PLATFORM_ERROR:
- return "A platform-specific error occurred";
- case GLFW_FORMAT_UNAVAILABLE:
- return "The requested format is unavailable";
- }
-
- return "ERROR: UNKNOWN ERROR TOKEN PASSED TO glfwErrorString";
-}
-
-
//========================================================================
// Sets the callback function for GLFW errors
// This function may be called without GLFW having been initialized
diff --git a/tests/accuracy.c b/tests/accuracy.c
index d320f64c..099a619c 100644
--- a/tests/accuracy.c
+++ b/tests/accuracy.c
@@ -51,6 +51,11 @@ static void set_swap_interval(GLFWwindow window, int interval)
glfwSetWindowTitle(window, title);
}
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
static void window_size_callback(GLFWwindow window, int width, int height)
{
window_width = width;
@@ -80,18 +85,15 @@ int main(void)
GLFWwindow window;
int width, height;
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
window = glfwCreateWindow(window_width, window_height, GLFW_WINDOWED, "", NULL);
if (!window)
{
glfwTerminate();
-
- fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
}
diff --git a/tests/clipboard.c b/tests/clipboard.c
index c3746f19..7c931220 100644
--- a/tests/clipboard.c
+++ b/tests/clipboard.c
@@ -47,6 +47,11 @@ static GLboolean control_is_down(GLFWwindow window)
glfwGetKey(window, GLFW_KEY_RIGHT_CONTROL);
}
+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;
@@ -93,11 +98,6 @@ static void window_size_callback(GLFWwindow window, int width, int height)
glViewport(0, 0, width, height);
}
-static void error_callback(int error, const char* description)
-{
- fprintf(stderr, "Error in %s\n", description);
-}
-
int main(int argc, char** argv)
{
int ch;
diff --git a/tests/defaults.c b/tests/defaults.c
index 8f08889b..3b457695 100644
--- a/tests/defaults.c
+++ b/tests/defaults.c
@@ -72,16 +72,20 @@ static ParamGLFW glfw_params[] =
{ 0, NULL }
};
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
int main(void)
{
int i, width, height;
GLFWwindow window;
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
glfwWindowHint(GLFW_VISIBLE, GL_FALSE);
@@ -89,8 +93,6 @@ int main(void)
if (!window)
{
glfwTerminate();
-
- fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
}
diff --git a/tests/events.c b/tests/events.c
index 46bde2ab..c79af8b8 100644
--- a/tests/events.c
+++ b/tests/events.c
@@ -218,6 +218,11 @@ static const char* get_character_string(int character)
return result;
}
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
static void window_pos_callback(GLFWwindow window, int x, int y)
{
printf("%08x at %0.3f: Window position: %i %i\n",
@@ -344,11 +349,10 @@ int main(void)
setlocale(LC_ALL, "");
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
printf("Library initialized\n");
@@ -356,8 +360,6 @@ int main(void)
if (!window)
{
glfwTerminate();
-
- fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
}
diff --git a/tests/fsaa.c b/tests/fsaa.c
index 735a1f5f..b564bfe4 100644
--- a/tests/fsaa.c
+++ b/tests/fsaa.c
@@ -38,6 +38,11 @@
#include "getopt.h"
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
static void window_size_callback(GLFWwindow window, int width, int height)
{
glViewport(0, 0, width, height);
@@ -82,11 +87,10 @@ int main(int argc, char** argv)
}
}
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
if (samples)
printf("Requesting FSAA with %i samples\n", samples);
@@ -99,8 +103,6 @@ int main(int argc, char** argv)
if (!window)
{
glfwTerminate();
-
- fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
}
@@ -113,8 +115,6 @@ int main(int argc, char** argv)
if (!glfwExtensionSupported("GL_ARB_multisample"))
{
glfwTerminate();
-
- fprintf(stderr, "Context reports GL_ARB_multisample is not supported\n");
exit(EXIT_FAILURE);
}
diff --git a/tests/fsfocus.c b/tests/fsfocus.c
index a87d136a..c83e1668 100644
--- a/tests/fsfocus.c
+++ b/tests/fsfocus.c
@@ -35,6 +35,11 @@
static GLboolean running = GL_TRUE;
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
static void window_focus_callback(GLFWwindow window, int focused)
{
printf("%0.3f: Window %s\n",
@@ -76,18 +81,15 @@ int main(void)
{
GLFWwindow window;
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
window = glfwCreateWindow(640, 480, GLFW_FULLSCREEN, "Fullscreen focus", NULL);
if (!window)
{
glfwTerminate();
-
- fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
}
diff --git a/tests/gamma.c b/tests/gamma.c
index 8b995afc..324238d6 100644
--- a/tests/gamma.c
+++ b/tests/gamma.c
@@ -52,6 +52,11 @@ static void set_gamma(float value)
glfwSetGamma(gamma_value);
}
+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;
@@ -118,11 +123,10 @@ int main(int argc, char** argv)
}
}
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
if (mode == GLFW_FULLSCREEN)
{
@@ -141,8 +145,6 @@ int main(int argc, char** argv)
if (!window)
{
glfwTerminate();
-
- fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
}
diff --git a/tests/glfwinfo.c b/tests/glfwinfo.c
index 8db99111..bd0251dd 100644
--- a/tests/glfwinfo.c
+++ b/tests/glfwinfo.c
@@ -257,10 +257,7 @@ int main(int argc, char** argv)
glfwSetErrorCallback(error_callback);
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
if (major != 1 || minor != 0)
{
diff --git a/tests/iconify.c b/tests/iconify.c
index b0b6b6a1..0432e602 100644
--- a/tests/iconify.c
+++ b/tests/iconify.c
@@ -42,6 +42,11 @@ static void usage(void)
printf("Usage: iconify [-h] [-f]\n");
}
+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;
@@ -113,11 +118,10 @@ int main(int argc, char** argv)
}
}
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
if (mode == GLFW_FULLSCREEN)
{
@@ -136,8 +140,6 @@ int main(int argc, char** argv)
if (!window)
{
glfwTerminate();
-
- fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
}
diff --git a/tests/joysticks.c b/tests/joysticks.c
index 2b243687..d297a3f4 100644
--- a/tests/joysticks.c
+++ b/tests/joysticks.c
@@ -47,6 +47,11 @@ typedef struct Joystick
static Joystick joysticks[GLFW_JOYSTICK_LAST - GLFW_JOYSTICK_1 + 1];
static int joystick_count = 0;
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
static void window_size_callback(GLFWwindow window, int width, int height)
{
glViewport(0, 0, width, height);
@@ -185,18 +190,15 @@ int main(void)
memset(joysticks, 0, sizeof(joysticks));
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
window = glfwCreateWindow(640, 480, GLFW_WINDOWED, "Joystick Test", NULL);
if (!window)
{
glfwTerminate();
-
- fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
}
diff --git a/tests/peter.c b/tests/peter.c
index 30690e68..d7209e3a 100644
--- a/tests/peter.c
+++ b/tests/peter.c
@@ -56,6 +56,11 @@ static void toggle_cursor(GLFWwindow window)
}
}
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
static void cursor_position_callback(GLFWwindow window, int x, int y)
{
printf("Cursor moved to: %i %i (%i %i)\n", x, y, x - cursor_x, y - cursor_y);
@@ -111,16 +116,13 @@ static GLboolean open_window(void)
int main(void)
{
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
if (!open_window())
{
- fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
-
glfwTerminate();
exit(EXIT_FAILURE);
}
@@ -139,8 +141,6 @@ int main(void)
glfwDestroyWindow(window_handle);
if (!open_window())
{
- fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
-
glfwTerminate();
exit(EXIT_FAILURE);
}
diff --git a/tests/reopen.c b/tests/reopen.c
index 212c108d..cd085488 100644
--- a/tests/reopen.c
+++ b/tests/reopen.c
@@ -54,6 +54,11 @@ static const char* get_mode_name(int mode)
}
}
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
static void window_size_callback(GLFWwindow window, int width, int height)
{
glViewport(0, 0, width, height);
@@ -85,19 +90,13 @@ static GLboolean open_window(int width, int height, int mode)
double base;
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
return GL_FALSE;
- }
base = glfwGetTime();
window_handle = glfwCreateWindow(width, height, mode, "Window Re-opener", NULL);
if (!window_handle)
- {
- fprintf(stderr, "Failed to open %s mode GLFW window: %s\n", get_mode_name(mode), glfwErrorString(glfwGetError()));
return GL_FALSE;
- }
glfwMakeContextCurrent(window_handle);
glfwSwapInterval(1);
@@ -129,6 +128,8 @@ int main(int argc, char** argv)
{
int count = 0;
+ glfwSetErrorCallback(error_callback);
+
for (;;)
{
if (!open_window(640, 480, (count & 1) ? GLFW_FULLSCREEN : GLFW_WINDOWED))
diff --git a/tests/sharing.c b/tests/sharing.c
index 0042a858..b77aaf26 100644
--- a/tests/sharing.c
+++ b/tests/sharing.c
@@ -39,6 +39,11 @@
static GLFWwindow windows[2];
static GLboolean closed = GL_FALSE;
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
static void key_callback(GLFWwindow window, int key, int action)
{
if (action == GLFW_PRESS && key == GLFW_KEY_ESCAPE)
@@ -128,17 +133,14 @@ int main(int argc, char** argv)
{
GLuint texture;
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
windows[0] = open_window("First", NULL, 0, 0);
if (!windows[0])
{
- fprintf(stderr, "Failed to open first GLFW window: %s\n", glfwErrorString(glfwGetError()));
-
glfwTerminate();
exit(EXIT_FAILURE);
}
@@ -152,8 +154,6 @@ int main(int argc, char** argv)
windows[1] = open_window("Second", windows[0], WIDTH + 50, 0);
if (!windows[1])
{
- fprintf(stderr, "Failed to open second GLFW window: %s\n", glfwErrorString(glfwGetError()));
-
glfwTerminate();
exit(EXIT_FAILURE);
}
diff --git a/tests/tearing.c b/tests/tearing.c
index 63ece2ba..8ab6a1d4 100644
--- a/tests/tearing.c
+++ b/tests/tearing.c
@@ -48,6 +48,11 @@ static void set_swap_interval(GLFWwindow window, int interval)
glfwSetWindowTitle(window, title);
}
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
static void window_size_callback(GLFWwindow window, int width, int height)
{
glViewport(0, 0, width, height);
@@ -64,17 +69,14 @@ int main(void)
float position;
GLFWwindow window;
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
window = glfwCreateWindow(640, 480, GLFW_WINDOWED, "", NULL);
if (!window)
{
- fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
-
glfwTerminate();
exit(EXIT_FAILURE);
}
diff --git a/tests/threads.c b/tests/threads.c
index 8b06b1d3..9cc78975 100644
--- a/tests/threads.c
+++ b/tests/threads.c
@@ -47,6 +47,11 @@ typedef struct
static volatile GLboolean running = GL_TRUE;
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
static int thread_main(void* data)
{
const Thread* thread = (const Thread*) data;
@@ -80,12 +85,10 @@ int main(void)
};
const int count = sizeof(threads) / sizeof(Thread);
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n",
- glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
for (i = 0; i < count; i++)
{
@@ -97,8 +100,7 @@ int main(void)
NULL);
if (!threads[i].window)
{
- fprintf(stderr, "Failed to open GLFW window: %s\n",
- glfwErrorString(glfwGetError()));
+ glfwTerminate();
exit(EXIT_FAILURE);
}
@@ -106,6 +108,8 @@ int main(void)
thrd_success)
{
fprintf(stderr, "Failed to create secondary thread\n");
+
+ glfwTerminate();
exit(EXIT_FAILURE);
}
}
diff --git a/tests/title.c b/tests/title.c
index 62690f9c..b23f0ab2 100644
--- a/tests/title.c
+++ b/tests/title.c
@@ -32,6 +32,11 @@
#include
#include
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
static void window_size_callback(GLFWwindow window, int width, int height)
{
glViewport(0, 0, width, height);
@@ -41,17 +46,14 @@ int main(void)
{
GLFWwindow window;
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
window = glfwCreateWindow(400, 400, GLFW_WINDOWED, "English 日本語 русский язык 官話", NULL);
if (!window)
{
- fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
-
glfwTerminate();
exit(EXIT_FAILURE);
}
diff --git a/tests/windows.c b/tests/windows.c
index 187248c2..d0006836 100644
--- a/tests/windows.c
+++ b/tests/windows.c
@@ -40,18 +40,21 @@ static const char* titles[] =
"Quux"
};
+static void error_callback(int error, const char* description)
+{
+ fprintf(stderr, "Error: %s\n", description);
+}
+
int main(void)
{
int i;
GLboolean running = GL_TRUE;
GLFWwindow windows[4];
+ glfwSetErrorCallback(error_callback);
+
if (!glfwInit())
- {
- fprintf(stderr, "Failed to initialize GLFW: %s\n",
- glfwErrorString(glfwGetError()));
exit(EXIT_FAILURE);
- }
for (i = 0; i < 4; i++)
{
@@ -60,9 +63,6 @@ int main(void)
windows[i] = glfwCreateWindow(200, 200, GLFW_WINDOWED, titles[i], NULL);
if (!windows[i])
{
- fprintf(stderr, "Failed to open GLFW window: %s\n",
- glfwErrorString(glfwGetError()));
-
glfwTerminate();
exit(EXIT_FAILURE);
}