mirror of
				https://github.com/glfw/glfw.git
				synced 2025-10-31 20:52:38 +00:00 
			
		
		
		
	Moved error handling to init module.
This commit is contained in:
		
							parent
							
								
									85ca7ee184
								
							
						
					
					
						commit
						bd5ff15769
					
				| @ -3,7 +3,7 @@ include_directories(${GLFW_SOURCE_DIR}/src | |||||||
|                     ${glfw_INCLUDE_DIRS}) |                     ${glfw_INCLUDE_DIRS}) | ||||||
| 
 | 
 | ||||||
| set(common_HEADERS ${GLFW_SOURCE_DIR}/include/GL/glfw3.h internal.h) | 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) |                    joystick.c opengl.c time.c window.c) | ||||||
| 
 | 
 | ||||||
| if (_GLFW_COCOA_NSGL) | if (_GLFW_COCOA_NSGL) | ||||||
|  | |||||||
							
								
								
									
										149
									
								
								src/error.c
									
									
									
									
									
								
							
							
						
						
									
										149
									
								
								src/error.c
									
									
									
									
									
								
							| @ -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 <elmindreda@elmindreda.org>
 |  | ||||||
| //
 |  | ||||||
| // 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 <stdio.h> |  | ||||||
| #include <stdarg.h> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| //////////////////////////////////////////////////////////////////////////
 |  | ||||||
| //////                       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; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
							
								
								
									
										113
									
								
								src/init.c
									
									
									
									
									
								
							
							
						
						
									
										113
									
								
								src/init.c
									
									
									
									
									
								
							| @ -32,6 +32,8 @@ | |||||||
| 
 | 
 | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdarg.h> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| //////////////////////////////////////////////////////////////////////////
 | //////////////////////////////////////////////////////////////////////////
 | ||||||
| @ -51,6 +53,56 @@ GLboolean _glfwInitialized = GL_FALSE; | |||||||
| _GLFWlibrary _glfwLibrary; | _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                       //////
 | //////                        GLFW public API                       //////
 | ||||||
| //////////////////////////////////////////////////////////////////////////
 | //////////////////////////////////////////////////////////////////////////
 | ||||||
| @ -132,3 +184,64 @@ GLFWAPI const char* glfwGetVersionString(void) | |||||||
|     return _glfwPlatformGetVersionString(); |     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; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user