From e2fc2da055950551dd810f07506a994feb12de21 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sat, 1 Feb 2025 19:58:22 +1100 Subject: [PATCH] Move error handling code into the cold path --- GL/error.c | 27 +++++++++++++++++++++++++-- GL/private.h | 31 +------------------------------ 2 files changed, 26 insertions(+), 32 deletions(-) diff --git a/GL/error.c b/GL/error.c index 4eb180d..4fe965e 100644 --- a/GL/error.c +++ b/GL/error.c @@ -12,8 +12,31 @@ #include "private.h" -GLenum LAST_ERROR = GL_NO_ERROR; -char ERROR_FUNCTION[64] = { '\0' }; +static GLenum LAST_ERROR = GL_NO_ERROR; +static char ERROR_FUNCTION[64] = { '\0' }; + +GL_FORCE_INLINE const char* _glErrorEnumAsString(GLenum error) { + switch(error) { + case GL_INVALID_ENUM: return "GL_INVALID_ENUM"; + case GL_OUT_OF_MEMORY: return "GL_OUT_OF_MEMORY"; + case GL_INVALID_OPERATION: return "GL_INVALID_OPERATION"; + case GL_INVALID_VALUE: return "GL_INVALID_VALUE"; + default: + return "GL_UNKNOWN_ERROR"; + } +} + +void _glKosThrowError(GLenum error, const char *function) { + if(LAST_ERROR == GL_NO_ERROR) { + LAST_ERROR = error; + sprintf(ERROR_FUNCTION, "%s\n", function); + fprintf(stderr, "GL ERROR: %s when calling %s\n", _glErrorEnumAsString(LAST_ERROR), ERROR_FUNCTION); + } +} + +GL_FORCE_INLINE void _glKosResetError() { + LAST_ERROR = GL_NO_ERROR; +} /* Quoth the GL Spec: When an error occurs, the error flag is set to the appropriate error code diff --git a/GL/private.h b/GL/private.h index 8230f01..aca0b87 100644 --- a/GL/private.h +++ b/GL/private.h @@ -484,36 +484,7 @@ GL_FORCE_INLINE GLuint _glRecalcFastPath() { extern GLboolean IMMEDIATE_MODE_ACTIVE; -extern GLenum LAST_ERROR; -extern char ERROR_FUNCTION[64]; - -GL_FORCE_INLINE const char* _glErrorEnumAsString(GLenum error) { - switch(error) { - case GL_INVALID_ENUM: return "GL_INVALID_ENUM"; - case GL_OUT_OF_MEMORY: return "GL_OUT_OF_MEMORY"; - case GL_INVALID_OPERATION: return "GL_INVALID_OPERATION"; - case GL_INVALID_VALUE: return "GL_INVALID_VALUE"; - default: - return "GL_UNKNOWN_ERROR"; - } -} - -GL_FORCE_INLINE void _glKosThrowError(GLenum error, const char *function) { - if(LAST_ERROR == GL_NO_ERROR) { - LAST_ERROR = error; - sprintf(ERROR_FUNCTION, "%s\n", function); - fprintf(stderr, "GL ERROR: %s when calling %s\n", _glErrorEnumAsString(LAST_ERROR), ERROR_FUNCTION); - } -} - -GL_FORCE_INLINE GLubyte _glKosHasError() { - return (LAST_ERROR != GL_NO_ERROR) ? GL_TRUE : GL_FALSE; -} - -GL_FORCE_INLINE void _glKosResetError() { - LAST_ERROR = GL_NO_ERROR; - sprintf(ERROR_FUNCTION, "\n"); -} +GL_NO_INLINE void _glKosThrowError(GLenum error, const char *function); GL_FORCE_INLINE GLboolean _glCheckImmediateModeInactive(const char* func) { /* Returns 1 on error */