From bd5ff15769d3602929c3d584410597a7b547e6f2 Mon Sep 17 00:00:00 2001 From: Camilla Berglund Date: Sun, 26 Aug 2012 18:49:39 +0200 Subject: [PATCH] Moved error handling to init module. --- src/CMakeLists.txt | 2 +- src/error.c | 149 --------------------------------------------- src/init.c | 113 ++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 150 deletions(-) delete mode 100644 src/error.c diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5e735991..eaf37325 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,7 +3,7 @@ include_directories(${GLFW_SOURCE_DIR}/src ${glfw_INCLUDE_DIRS}) set(common_HEADERS ${GLFW_SOURCE_DIR}/include/GL/glfw3.h internal.h) -set(common_SOURCES clipboard.c error.c fullscreen.c gamma.c init.c input.c +set(common_SOURCES clipboard.c fullscreen.c gamma.c init.c input.c joystick.c opengl.c time.c window.c) if (_GLFW_COCOA_NSGL) diff --git a/src/error.c b/src/error.c deleted file mode 100644 index d64cb7cc..00000000 --- a/src/error.c +++ /dev/null @@ -1,149 +0,0 @@ -//======================================================================== -// GLFW - An OpenGL library -// Platform: All -// API version: 3.0 -// WWW: http://www.glfw.org/ -//------------------------------------------------------------------------ -// Copyright (c) 2008-2010 Camilla Berglund -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would -// be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not -// be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source -// distribution. -// -//======================================================================== - -#include "internal.h" - -#include -#include - - -////////////////////////////////////////////////////////////////////////// -////// GLFW internal API ////// -////////////////////////////////////////////////////////////////////////// - -//======================================================================== -// The current error value and callback -// These are not in _glfwLibrary since they need to be initialized and -// accessible before glfwInit so it can report errors -//======================================================================== - -static int _glfwError = GLFW_NO_ERROR; -static GLFWerrorfun _glfwErrorCallback = NULL; - - -//======================================================================== -// Sets the current error value -// This function may be called without GLFW having been initialized -//======================================================================== - -void _glfwSetError(int error, const char* format, ...) -{ - if (_glfwErrorCallback) - { - char buffer[16384]; - const char* description; - - if (format) - { - int count; - va_list vl; - - va_start(vl, format); - count = vsnprintf(buffer, sizeof(buffer), format, vl); - va_end(vl); - - if (count < 0) - buffer[sizeof(buffer) - 1] = '\0'; - - description = buffer; - } - else - description = glfwErrorString(error); - - _glfwErrorCallback(error, description); - } - else - _glfwError = error; -} - - -////////////////////////////////////////////////////////////////////////// -////// GLFW public API ////// -////////////////////////////////////////////////////////////////////////// - -//======================================================================== -// 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 OpenGL 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_OPENGL_UNAVAILABLE: - return "OpenGL is not available on this machine"; - case GLFW_VERSION_UNAVAILABLE: - return "The requested OpenGL version is unavailable"; - case GLFW_PLATFORM_ERROR: - return "A platform-specific error occurred"; - case GLFW_WINDOW_NOT_ACTIVE: - return "The specified window is not active"; - 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 -//======================================================================== - -GLFWAPI void glfwSetErrorCallback(GLFWerrorfun cbfun) -{ - _glfwErrorCallback = cbfun; -} - diff --git a/src/init.c b/src/init.c index 12dcd862..28f3a52f 100644 --- a/src/init.c +++ b/src/init.c @@ -32,6 +32,8 @@ #include #include +#include +#include ////////////////////////////////////////////////////////////////////////// @@ -51,6 +53,56 @@ GLboolean _glfwInitialized = GL_FALSE; _GLFWlibrary _glfwLibrary; +//======================================================================== +// Platform independent global error state +// These are not in _glfwLibrary because they need to be initialized and +// usable before glfwInit so it can report errors to the user +//======================================================================== + +// The current error code +// TODO: Make thread-local +static int _glfwError = GLFW_NO_ERROR; + +// The current error callback +static GLFWerrorfun _glfwErrorCallback = NULL; + + +//======================================================================== +// Sets the current error value +// This function may be called without GLFW having been initialized +//======================================================================== + +void _glfwSetError(int error, const char* format, ...) +{ + if (_glfwErrorCallback) + { + char buffer[16384]; + const char* description; + + if (format) + { + int count; + va_list vl; + + va_start(vl, format); + count = vsnprintf(buffer, sizeof(buffer), format, vl); + va_end(vl); + + if (count < 0) + buffer[sizeof(buffer) - 1] = '\0'; + + description = buffer; + } + else + description = glfwErrorString(error); + + _glfwErrorCallback(error, description); + } + else + _glfwError = error; +} + + ////////////////////////////////////////////////////////////////////////// ////// GLFW public API ////// ////////////////////////////////////////////////////////////////////////// @@ -132,3 +184,64 @@ GLFWAPI const char* glfwGetVersionString(void) return _glfwPlatformGetVersionString(); } + +//======================================================================== +// 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 OpenGL 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_OPENGL_UNAVAILABLE: + return "OpenGL is not available on this machine"; + case GLFW_VERSION_UNAVAILABLE: + return "The requested OpenGL version is unavailable"; + case GLFW_PLATFORM_ERROR: + return "A platform-specific error occurred"; + case GLFW_WINDOW_NOT_ACTIVE: + return "The specified window is not active"; + 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 +//======================================================================== + +GLFWAPI void glfwSetErrorCallback(GLFWerrorfun cbfun) +{ + _glfwErrorCallback = cbfun; +} +