1 /************************************************************************** 2 * 3 * Copyright 2009-2010 Chia-I Wu <olvaffe (at) gmail.com> 4 * All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sub license, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the 15 * next paragraph) shall be included in all copies or substantial portions 16 * of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 24 * DEALINGS IN THE SOFTWARE. 25 * 26 **************************************************************************/ 27 28 29 #ifndef EGLCURRENT_INCLUDED 30 #define EGLCURRENT_INCLUDED 31 32 #include "c99_compat.h" 33 34 #include "egltypedefs.h" 35 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 #define _EGL_API_ALL_BITS \ 42 (EGL_OPENGL_ES_BIT | \ 43 EGL_OPENVG_BIT | \ 44 EGL_OPENGL_ES2_BIT | \ 45 EGL_OPENGL_ES3_BIT_KHR | \ 46 EGL_OPENGL_BIT) 47 48 49 /** 50 * Per-thread info 51 */ 52 struct _egl_thread_info 53 { 54 EGLint LastError; 55 _EGLContext *CurrentContext; 56 EGLenum CurrentAPI; 57 EGLLabelKHR Label; 58 59 /** 60 * The name of the EGL function that's being called at the moment. This is 61 * used to report the function name to the EGL_KHR_debug callback. 62 */ 63 const char *CurrentFuncName; 64 EGLLabelKHR CurrentObjectLabel; 65 }; 66 67 68 /** 69 * Return true if a client API enum is recognized. 70 */ 71 static inline EGLBoolean 72 _eglIsApiValid(EGLenum api) 73 { 74 #ifdef ANDROID 75 /* OpenGL is not a valid/supported API on Android */ 76 return api == EGL_OPENGL_ES_API; 77 #else 78 return (api == EGL_OPENGL_ES_API || api == EGL_OPENGL_API); 79 #endif 80 } 81 82 83 extern _EGLThreadInfo * 84 _eglGetCurrentThread(void); 85 86 87 extern void 88 _eglDestroyCurrentThread(void); 89 90 91 extern EGLBoolean 92 _eglIsCurrentThreadDummy(void); 93 94 95 extern _EGLContext * 96 _eglGetCurrentContext(void); 97 98 99 extern EGLBoolean 100 _eglError(EGLint errCode, const char *msg); 101 102 extern void 103 _eglDebugReport(EGLenum error, const char *funcName, 104 EGLint type, const char *message, ...); 105 106 #define _eglReportCritical(error, funcName, ...) \ 107 _eglDebugReport(error, funcName, EGL_DEBUG_MSG_CRITICAL_KHR, __VA_ARGS__) 108 109 #define _eglReportError(error, funcName, ...) \ 110 _eglDebugReport(error, funcName, EGL_DEBUG_MSG_ERROR_KHR, __VA_ARGS__) 111 112 #define _eglReportWarn(funcName, ...) \ 113 _eglDebugReport(EGL_SUCCESS, funcName, EGL_DEBUG_MSG_WARN_KHR, __VA_ARGS__) 114 115 #define _eglReportInfo(funcName, ...) \ 116 _eglDebugReport(EGL_SUCCESS, funcName, EGL_DEBUG_MSG_INFO_KHR, __VA_ARGS__) 117 118 #ifdef __cplusplus 119 } 120 #endif 121 122 #endif /* EGLCURRENT_INCLUDED */ 123