1f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu/************************************************************************** 2f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 3f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com> 4f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * All Rights Reserved. 5f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 6f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a 7f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * copy of this software and associated documentation files (the 8f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * "Software"), to deal in the Software without restriction, including 9f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * without limitation the rights to use, copy, modify, merge, publish, 10f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * distribute, sub license, and/or sell copies of the Software, and to 11f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * permit persons to whom the Software is furnished to do so, subject to 12f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * the following conditions: 13f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 14f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * The above copyright notice and this permission notice (including the 15f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * next paragraph) shall be included in all copies or substantial portions 16f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * of the Software. 17f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 18f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 24f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * DEALINGS IN THE SOFTWARE. 25f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu * 26f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu **************************************************************************/ 27f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu 28f2001df508fda599a18b3586d2775e970a3db13aChia-I Wu 2940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul#ifndef EGLCURRENT_INCLUDED 3040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul#define EGLCURRENT_INCLUDED 3140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 3294cb321b5d246185abf71d89968d472a626f1a23Chia-I Wu 3340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul#include "egltypedefs.h" 3440fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 3540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 36310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu#define _EGL_API_ALL_BITS \ 37310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu (EGL_OPENGL_ES_BIT | \ 38310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu EGL_OPENVG_BIT | \ 39310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu EGL_OPENGL_ES2_BIT | \ 40310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu EGL_OPENGL_BIT) 41310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu 42310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu 43310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu#define _EGL_API_FIRST_API EGL_OPENGL_ES_API 44310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu#define _EGL_API_LAST_API EGL_OPENGL_API 45310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu#define _EGL_API_NUM_APIS (_EGL_API_LAST_API - _EGL_API_FIRST_API + 1) 4640fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 4740fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 4840fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul/** 4940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul * Per-thread info 5040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul */ 5140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paulstruct _egl_thread_info 5240fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul{ 5340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul EGLint LastError; 54310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu _EGLContext *CurrentContexts[_EGL_API_NUM_APIS]; 5540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul /* use index for fast access to current context */ 5640fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul EGLint CurrentAPIIndex; 5740fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul}; 5840fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 5940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 6040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul/** 61310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu * Return true if a client API enum is recognized. 6240fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul */ 6340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paulstatic INLINE EGLBoolean 6440fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglIsApiValid(EGLenum api) 6540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul{ 66310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu return (api >= _EGL_API_FIRST_API && api <= _EGL_API_LAST_API); 6740fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul} 6840fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 6940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 7040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul/** 7140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul * Convert a client API enum to an index, for use by thread info. 7240fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul * The client API enum is assumed to be valid. 7340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul */ 7440fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paulstatic INLINE EGLint 7540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglConvertApiToIndex(EGLenum api) 7640fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul{ 77310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu return api - _EGL_API_FIRST_API; 7840fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul} 7940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 8040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 8140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul/** 8240fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul * Convert an index, used by thread info, to a client API enum. 8340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul * The index is assumed to be valid. 8440fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul */ 8540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paulstatic INLINE EGLenum 8640fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglConvertApiFromIndex(EGLint idx) 8740fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul{ 88310c76812e5a2013dad36fc9d1686f57e7b1e626Chia-I Wu return _EGL_API_FIRST_API + idx; 8940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul} 9040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 9140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 92897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC _EGLThreadInfo * 9340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglGetCurrentThread(void); 9440fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 9540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 9640fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paulextern void 9740fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglDestroyCurrentThread(void); 9840fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 9940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 10040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paulextern EGLBoolean 10140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglIsCurrentThreadDummy(void); 10240fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 10340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 104897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC _EGLContext * 1056f6f3e4227855c87a78a717bce7374a7d64172ceChia-I Wu_eglGetAPIContext(EGLenum api); 1066f6f3e4227855c87a78a717bce7374a7d64172ceChia-I Wu 1076f6f3e4227855c87a78a717bce7374a7d64172ceChia-I Wu 1086f6f3e4227855c87a78a717bce7374a7d64172ceChia-I WuPUBLIC _EGLContext * 10940fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglGetCurrentContext(void); 11040fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 11140fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 112897cb8950ae14ffe7029b1daf16113ff62ce0dfeChia-I WuPUBLIC EGLBoolean 11340fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul_eglError(EGLint errCode, const char *msg); 11440fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 11540fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul 11640fd1019195681e3b94f5878b57190f3ae7d8e0eBrian Paul#endif /* EGLCURRENT_INCLUDED */ 117